Как отследить утечку памяти JVM без кучи в Jboss AS 5.1? - PullRequest
5 голосов
/ 13 января 2010

После обновления до JBoss AS 5.1, работающего на JRE 1.6_17, CentOS 5 Linux, процессу JRE не хватает памяти примерно через 8 часов (достигает максимума 3G в 32-битной системе). Это происходит на обоих серверах в кластере при умеренной нагрузке. Использование кучи Java ограничивается, но общий объем JVM просто продолжает расти. Счетчик потоков очень стабилен и максимально равен 370 потокам с размером стека 128К.

Контур JVM достигает 3G, затем он умирает с:

java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space?

  Internal Error (allocation.cpp:117), pid=8443, tid=1667668880
  Error: ChunkPool::allocate

Текущие аргументы памяти JVM:

-Xms1024m -Xmx1024m -XX: MaxPermSize = 256 м -XX: ThreadStackSize = 128

Учитывая эти настройки, я бы ожидал, что объем процесса достигнет 1,5 ГБ. Вместо этого он продолжает расти, пока не достигнет 3G.

Кажется, ни один из стандартных инструментов памяти Java не может сказать мне, что на нативной стороне JVM пожирает всю эту память. (Eclipse MAT, Jmap и т. Д.). Pmap на PID просто дает мне кучу [anon] распределений, которые не очень помогают. Насколько я могу судить, эта проблема с памятью возникает, когда у меня не загружены ни классы JNI, ни классы java.nio.

Как я могу устранить неполадки на собственной / внутренней стороне JVM, чтобы узнать, куда направляется вся не-кучевая память?

Спасибо! У меня быстро заканчиваются идеи, и перезапуск серверов приложений каждые 8 ​​часов не будет очень хорошим решением.

Ответы [ 3 ]

0 голосов
/ 13 января 2010

Как подсказал @ Thorbjørn, профилируйте свою заявку.

Если вам нужно больше памяти, вы можете использовать 64-битное ядро ​​и JVM.

0 голосов
/ 03 июня 2010

Walton: У меня была похожая проблема, опубликовал мой вопрос / находку в https://community.jboss.org/thread/152698. Пожалуйста, попробуйте добавить -Djboss.vfs.forceCopy = false к параметру запуска Java, чтобы посмотреть, поможет ли это. ПРЕДУПРЕЖДЕНИЕ: даже если это сокращает размер процесса, вам нужно больше тестировать, чтобы убедиться, что все в порядке.

0 голосов
/ 13 января 2010

Присоединитесь к Jvisualvm в JDK, чтобы получить представление о том, что происходит. jvisualvm может подключиться к запущенному процессу.

...