Как сбросить Пермген? - PullRequest
22 голосов
/ 02 ноября 2010

Я хотел взять дамп Permgen сервера приложений.

Я не хочу использовать -XX:+TraceClassLoading -XX:+TraceClassUnloading, поскольку я не хочу перезагружать сервер, а также я не хочу использовать jconsole.

У меня есть какой-либо инструмент, например jmap (используемый для кучи дампа, но не нашел никакой опции для permgen), чтобы получить permgen, чтобы я мог предоставить только pid.

Ответы [ 3 ]

17 голосов
/ 25 мая 2011
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/DelegatingClassLoader@0x43f95d38
0x4f83f670  1   1744    0x4ebfb8e8  dead    sun/reflect/DelegatingClassLoader@0x43f95d38
[...]

total = 287 10020   35889952        N/A     alive=3, dead=284       N/A  

Это не полный дамп, но выполнение этого позволит вам провести некоторое расследование.

Я все еще ищу, как найти больше информации.

12 голосов
/ 17 декабря 2010

Невозможно «сбросить permgen», как это сделано для кучи.

В дополнение к jmap -permstat, как и другие, вы можете проанализировать стандартный дамп кучи, чтобы пролить свет на ваше постоянное поколение, как описано в этой записи блога: «Неизвестное поколение: Пермь» .

Поскольку дамп кучи на самом деле не содержит много информации о пространстве перми, проблемы с перманентом трудно решить. Недавно я нашел эту замечательную статью Спорара, Сундарараджана и Киевиеты. Авторы проливают свет на постоянное поколение. Конечно, мне пришлось сразу же проверить, можно ли использовать Eclipse Memory Analyzer для анализа этого «неизвестного» поколения. Об этом и рассказывается в этом блоге.

1 голос
/ 02 ноября 2010
jmap -permstat <pid>
...