LINUX.ORG.RU

Флаги JVM

 ,


0

1

В Интернетах пишут, что по дефолту GC не чистит PermGen.
Чтобы заставить ее это делать, нужно запустить со следующими флагами:

-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
Где-то пишут, что данные флаги решают проблему, пользуйтесь.
Где-то пишут, что CMS collector нужно использовать ооочень осторожно, что если heap size меньше 1GB и если нету 4 CPU, то его лучше не использовать вообще:

I would never use the CMS collector with less than 1GB of heap space. And I would not use the CMS collector unless I understood what effect it had on my application and system in general. Never ever ever use the CMS collector on a single CPU system. I would not turn it on unless I had at least 4 CPUs.


Еще пишут:

For example, in JVM 6 the -XX:+CMSPermGenSweepingEnabled option results in a warning to use -XX:+CMSClassUnloadingEnabled instead.

А на Сайте Оракла написано:

The following example JVM settings are recommended for most engine tier servers:

-server -XX:MaxPermSize=128m -XX:+UseParNewGC -XX:MaxNewSize=256m -XX:NewSize=256m -Xms768m -Xmx768m -XX:SurvivorRatio=128 -XX:MaxTenuringThreshold=0 -XX:+UseTLAB -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

Помогите разобраться с данными флагами. Стоит ли их использовать? В каких случаях?

★★★★★

Конкретнее вопрос задайте? Чего вы хотите добиться? Асбстрактно набор ключей, работающих наиболее быстро? Таких нет.

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

Приложение иногда падает от java.lang.OutOfMemoryError: PermGen space.
Улучшит ли ситуацию использование этих трех флагов?

kovrik ★★★★★
() автор топика
Ответ на: комментарий от kovrik

-XX:MaxPermSize=256m если падает во время просто работы приложения.

и никак, если падает при регулярных передеплоях.

JFreeM ★★★☆
()
Ответ на: комментарий от kovrik

Выставить размер премгена побольше?

anonymous
()

Вообще говоря,

В Интернетах пишут, что по дефолту GC не чистит PermGen.

это правда. Но также правда и то, что его чистить не надо, там тупо хранится подгруженный байт-код загруженных классов в системе. Он загружается один раз и больше его трогать, собственно, не рекомендуется.

JFreeM ★★★☆
()
Ответ на: комментарий от kovrik

Перейти на быстростартующий контейнер. Одна варка — один инстанс.

baverman ★★★
()
Ответ на: комментарий от kovrik

Что тогда делать?

обычно это происходит на dev environment, поэтому в принципе с этим можно смириться. Продакшн редеплоить с рестартом контейнера.

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

А можно рассказать (или кинуть ссылкой, где можно прочитать) почему так происходит? Нажал я Restart приложения в Tomcat App Manager'е, какие действия происходят? Из контейнера выгружается сервлет, а потом снова загружается? Откуда берется утечка?

kovrik ★★★★★
() автор топика
Ответ на: комментарий от kovrik

Что тогда делать?

спроси у maxcom-а, на ЛОРе вроде такой же лик был. или погугли ветки на rsdn.ru sql.ru там давали люди ссылки с рецептами

Karapuz ★★★★★
()
Ответ на: комментарий от kovrik

Да никак не лечится - я пробовал разные флаги, в любом случае рано или поздно возникает конец PermGen. Так что после нескольких редеплоев делаю рестарт

maxcom ★★★★★
()
Ответ на: комментарий от kovrik

Уже прочитал в интернетах. Всем спасибо!

kovrik ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.