Высокий PermGen, но низкое использование кучи

Я часто вижу High Perm Gen в своем java(веб) приложении.

Команда jmap, часто показывает, что она используется на 90%. Но это, похоже, не вызывает никаких проблем с моим приложением. Общее использование кучи довольно низкое (около 400 МБ, где максимальная память установлена ​​на 2048 МБ).

Команда, которая управляет Приложением в Производстве, обеспокоена тем, что PermGen является Высоким. И часто всевозможные проблемы связаны с этим.

Вопрос:
(1) Должен ли я волноваться только из-за того, что PermGen имеет высокий уровень, разве PermGen не выйдет из строя, когда произойдет сбор мусора?
(2) Если бы я удвоил максимальный размер PermGen (текущий - 200 МБ), будет ли какой-либо побочный эффект этого?

2 ответа

Решение

(1) Должен ли я волноваться только из-за того, что PermGen имеет высокий уровень, разве PermGen не выйдет из строя, когда произойдет сбор мусора?

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

(2) Если бы я удвоил максимальный размер PermGen (текущий - 200 МБ), будет ли какой-либо побочный эффект этого?

Первый очевидный побочный эффект заключается в том, что JVM будет использовать больше оперативной памяти. Убедитесь, что физической памяти, выделенной для машины, достаточно. BIRT - это пример приложения, которое довольно быстро выходит из строя из-за постоянного пространства, хотя утечки нет. Во-вторых, я бы также выяснил, есть ли утечка в вашем пермгене Увеличение значения permgen в качестве меры предосторожности - это хорошо, но это может не помочь приложению в долгосрочной перспективе при утечке памяти.

Например, утечка драйвера может привести к большему использованию permgen. Хорошим лакмусовым тестом является многократное горячее развертывание приложения и проверка изменений в permgen. Продолжает ли он увеличиваться, пока у вас не закончится память? Тогда у вас есть утечка.

У вас есть три вещи для беспокойства: куча, постоянная память и общая резидентная память.

Вам не нужно беспокоиться о перманенте, пока он не иссякнет. Попробуйте увеличить значение.

Побочный эффект - больше потребляемой памяти. Ваша статистика показывает, что вы можете использовать больше perm gen и меньше max heap.

Ваша настоящая забота не должна касаться значений времени. Поскольку это веб-приложение, вам нужно следить за кучей, перманентом и общей резидентной памятью и видеть, как они развиваются с течением времени.

У вас есть отличное приложение, если GC держит все под контролем, а сервер может обрабатывать типичные и пиковые нагрузки. Если со временем он увеличивается, возможно, вам придется беспокоиться об утечке памяти.

На каком сервере приложений вы развернуты? Это имеет большое значение. Приложение Tomcat будет намного легче в общей резидентной памяти, чем полноценный сервер приложений Java EE.

Другие вопросы по тегам