Tomcat on production server, PermGen and redeploys

It looks like

 MemoryError: PermGen space
 java.lang.OutOfMemoryError: PermGen space

is a common problem. You can Increase the size of your perm space, but after 100 or 200 redeploys it will be full. Tracking ClassLoader memory leaks is nearly impossible.

What are your methods for Tomcat (or another simple servlet container - Jetty?) on production server? Is server restart after each deploy a solution?

Do you use one Tomcat for many applications ?

Maybe I should use many Jetty servers on different ports (or an embedded Jetty) and do undeploy/restart/deploy each time ?

21
задан Pascal Thivent 19 August 2010 в 21:19
поделиться

3 ответа

Я отказался от использования диспетчера tomcat и теперь всегда выключаю tomcat для повторного развертывания.

Мы запускаем два tomcat на одном сервере и используем веб-сервер apache с mod_proxy_ajp чтобы пользователи могли получить доступ к обоим приложениям через один и тот же порт 80. Это приятно еще и потому, что пользователи видят страницу Apache Service Unavailable, когда tomcat не работает.

6
ответ дан 29 November 2019 в 22:02
поделиться

Да, действительно, это проблема. Мы запускаем три веб-приложения на сервере Tomcat: No. 1 использует фреймворк веб-приложений, Hibernate и множество других JAR, No. 2 использует Hibernate и несколько JAR, а No. 3 - в основном очень простое JSP-приложение.

Когда мы развертываем No. 1, мы всегда перезапускаем Tomcat. В противном случае ошибка PermGen space вскоре укусит нас. Приложение № 2 иногда может быть развернуто без проблем, но поскольку оно часто меняется, когда меняется и приложение № 1, перезапуск все равно планируется. Номер 3 не представляет никакой проблемы и может быть развернут так часто, как это необходимо, без проблем.

Итак, да, мы обычно перезапускаем Tomcat. Но мы также с нетерпением ждем Tomcat 7, который должен решить многие проблемы с памятью/загрузчиком классов, которые кроются в различных сторонних JAR и фреймворках.

2
ответ дан 29 November 2019 в 22:02
поделиться

Вы можете попробовать добавить следующие параметры Java:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

Это включает сборку мусора в пространстве PermGen (по умолчанию отключено) и позволяет сборщику мусора выгружать классы. Кроме того, вы должны использовать -XX: PermSize = 64m -XX: MaxPermSize = 128m, упомянутый в другом месте, чтобы увеличить количество доступного PermGen.

3
ответ дан 29 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: