Подтвердить что ты не робот

Как сбросить Пермген?

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

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

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

4b9b3361

Ответ 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>