После обновления до 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 часов не будет очень хорошим решением.