Повторяющийся "PermGen" в Tomcat 6 - PullRequest
19 голосов
/ 23 января 2009

Я получаю сообщение об ошибке «PermGen» на моем сервере Tomcat 6.

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

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

Спасибо

Ответы [ 6 ]

25 голосов
/ 23 января 2009

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

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

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

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

13 голосов
/ 03 декабря 2009

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

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

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

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

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

3 голосов
/ 25 сентября 2012

попробуйте это: В Linux машин

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

2 голосов
/ 25 апреля 2012

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

2 голосов
/ 23 января 2009

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

1 голос
/ 18 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...