Как сбросить Пермген?
Я хотел взять дамп Permgen сервера приложений.
Я не хочу использовать -XX:+TraceClassLoading -XX:+TraceClassUnloading
, поскольку я не хочу перезапускать сервер. Я также не хочу использовать jconsole
.
У меня есть такой инструмент, как jmap
(используемый для кучи дампа, не нашел какой-либо опции для permgen), чтобы получить переменную, чтобы я мог предоставить только pid
.
Ответы
Ответ 1
jmap -permstat <pid>
собирается создать такой вывод:
30337 intern Strings occupying 2746200 bytes.
class_loader classes bytes parent_loader alive? type
<bootstrap> 2031 7253392 null live <internal>
0x517474f0 1 1760 null dead sun/reflect/[email protected]
0x4f83f670 1 1744 0x4ebfb8e8 dead sun/reflect/[email protected]
[...]
total = 287 10020 35889952 N/A alive=3, dead=284 N/A
Это не полный дамп, но это позволит вам провести некоторое расследование.
Я все еще ищу, как найти дополнительную информацию.
Ответ 2
Невозможно "сбрасывать permgen", как это сделано для кучи.
В дополнение к jmap -permstat
, как показали другие, вы можете проанализировать стандартный кучи кучи, чтобы пролить свет на ваше постоянное поколение, как описано в этой записи в блоге: "Неизвестное поколение: Пермь" .
Поскольку куча кучи на самом деле не содержит много информации о perm space, проблемы с перманентностью трудно решить. Недавно я нашел эту замечательную статью Спорара, Сундарараджана и Киевета. Авторы пролили свет на постоянное поколение. Конечно, мне пришлось сразу проверить, как и как я могу использовать Eclipse Memory Analyzer для анализа этого "неизвестного" поколения. Вот о чем этот блог.
Ответ 3
jmap -permstat <pid>