"Текущие классы загружены:" постоянно увеличивается, PermGen отскакивает от максимума?
В течение последних нескольких дней я запускал нагрузку на свое веб-приложение и заметил, что число текущих загруженных классов, просматриваемое с помощью мониторинга JMX, постоянно увеличивается. Он будет увеличиваться, а затем уменьшаться, но среднее количество загружаемых классов линейно увеличивается со временем. В начале загрузки "Current Classes Loaded" было всего несколько тысяч. Однако теперь "Current Classes Loaded" достигло 130 000+.
Это нормально? Я знаю, что классы будут заполнять память PermGen, но не ясно, протекает ли память PermGen.
Used:
65,124 kbytes
Committed:
65,536 kbytes
Max:
65,536 kbytes
Используемое число перемещается между 62k и 65k, но я пока не заметил какого-либо катастрофического сбоя на сервере. Мой вопрос в два раза.
Во-первых, это нормально? Если это не так, это в конечном итоге приведет к краху Tomcat?
1 ответ
Я боюсь, что нет четкого ответа на ваш вопрос. наибольшее пространство в permgen должно быть занято классами вашего приложения. Возможно, ваше приложение генерирует классы во время работы. тогда описанное поведение вашего приложения соответствует ожидаемому. когда ваше приложение не генерирует классы на лету, количество загруженных классов и количество permgen должно быть более или менее статичным.
когда ваше приложение создает много классов, у вас могут возникнуть проблемы с памятью. вы увидите java.lang.OutOfMemoryError: PermGen space
сообщения в журнале кота. Вы можете проверить это, установив perm gen явно с помощью этого параметра: -XX:MaxPermSize=
,
Вы также можете попробовать этот параметр: -XX:+CMSClassUnloadingEnabled
с помощью сборщика мусора cms. когда количество загруженных классов не уменьшается, у вас все еще есть ссылки от объектов на эти классы. это может быть признаком того, что у вас действительно есть утечка памяти. но вы обязательно должны знать работающее приложение, чтобы быть уверенным. когда это желаемое поведение приложения, вы можете только увеличить пространство для разрешения. размер perm gen является дополнительным к размеру кучи.
Вот публикация на stackoverflow, которая предлагает метод, чтобы прояснить, что является содержимым permgen.