Серебряной пули не существует, по крайней мере для OutOfMemoryError

В ответ на мою заметку об OutOfMemoryError, на одном замечательном форуме меня немножко поправили и дополнили.

Цитата (автор Shurr):

Для начала стоит попытаться определиться с чем проблема: с кодом приложения, или с ресурсами. Если проблема в ресурсах – я бы начал с базовых рекомендаций по диагностике тюнингу от производителя, например Tuning Garbage Collection от Sun. Конкретно по ключам запуска можно посмотреть здесь. В случае, если используется не HotSpot JVM от Sun, то и документацию по используемой реализации, например для IBM.

В данном случае ошибка возникает при горячем передеплое, и OutOfMemory вылетает для perm-области. После прочтения документации мы видим, что проблема скорее всего в ресурсах. Конкретнее – при горячем передеплое контейнер держит два полных набора классов: старые классы ждут полной выработки уже запущенных на исполнение задач, новые используются для всех вновь поступивших.

В качестве простого решения можно попробовать увеличить размер perm’а. Логически можно предположить, что увеличивать размер perm’а более чем в два раза сейчас не нужно, т.к. один полный набор классов в текущий момент влазит в выделенную для него память.
Если не поможет – нужно смотреть лог сборки мусора, производится ли она в указанной области, с какими результатами.

Да, я согласен, что проблема описанная мной в заметке – OutOfMemoryError, на самом деле намного глубже и серьезнее. Но ведь не всегда требуется глубокий анализ для решения проблемы, иногда банально не хватает времени:)

p/s
Спасибо Shurr за более глубокое разъяснение проблемы:)

Related Posts:

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

You must be logged in to post a comment.