Подтвердить что ты не робот

Повторяющийся "PermGen" в Tomcat 6

Я продолжаю получать ошибку "PermGen" на моем сервере Tomcat 6.

Я знаю, какое приложение вызывает проблему, но я не уверен, почему это так. Приложение использует MySQL 5 и работает на JDK 6.

Существуют ли какие-либо инструменты/предложения для диагностики или анализа основных проблем с конкретным приложением?

Спасибо

4b9b3361

Ответ 1

PermGen используется для хранения определений классов и интернированного пула строк. Ваш код мог бы заполнить его (если он вызывает неуспешно), но более вероятно, что значение по умолчанию для вашего приложения мало.

Это связано с тем, что Tomcat будет загружать новые классы при каждом развертывании WAR - или, если вы работаете в среде разработки, каждый раз, когда вы редактируете JSP. В конечном итоге их следует очистить, но в активной среде разработки могут быть периоды, в которых загружены как старые, так и новые экземпляры. Или, если вы находитесь в производственной среде и имеете большое веб-приложение, вам может потребоваться больше места.

Чтобы установить размер перменца, используйте -XX:MaxPermSize=SIZE

Следующие ссылки могут быть полезны: настройка GC (это версия 1.5), FAQ GC (версия 1.4.2), Параметры виртуальной машины Hotspot (я считаю, что это 1.6)

Ответ 2

Попробуйте использовать следующие JVM-переключатели:

-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled

Ускорение пространства перменства с помощью -XX:MaxPermSize просто задерживает проблему.

Пожалуйста, смотрите этот комментарий: Как бороться с ошибкой java.lang.OutOfMemoryError: PermGen space

Это косвенно указало мне на эти два сообщения: проблема, решение

Ответ 3

попробуйте следующее: В Linux-машинах

export JAVA_OPTS="-XX:PermSize=128m"

Ответ 4

Я думаю, у вас может быть много JSP в вашем приложении. Известная проблема в tomcat, где перезапуск развернутого приложения со многими JSP вызывает проблемы PermGen, потому что tomcat перекомпилирует и перезагружает все эти классы снова. Увеличение размера, как указано в предыдущем посте, должно помочь.

Ответ 5

Я согласен с тем, что увеличение пространства пермгенов с помощью -XX: MaxPermSize просто задерживает проблему. Я попробовал увеличить permgen, и после этого я начал получать ту же ошибку после того, как отправил на сервер больше запросов. Предлагаются дополнительные флаги, такие как -XX: + CMSClassUnloadingEnabled, хотя это немного уменьшит производительность.

Ответ 6

Я видел много ошибок пергмена, когда tomcat перезагружается после изменения кода при использовании hibernate и spring, я думаю, что из-за того, что экземпляры logger/ehcache не закрываются должным образом.