Java HotSpot 1.6 VM, сборка "мусора" - страшный PermGen

Мои шоу приложения, повышающиеся 'Старое Поколение'/'Tenured Поколение' размер, и когда это достигает макс. предела для 'Старого Генерала', затем внезапно увеличения размера PermGen. Вот мои калибровки поколения:

-Xmx1200m -Xms1200m -Xmn450m -XX:MaxPermSize=600m -XX:+UseParallelGC

Это находится на Fedora на 32 бита, так не может иметь большей "кучи", чем это.

Приложение не делает никакого воображения classloading, хотя оно использует Spring МОК, и Будьте в спящем режиме, Spring, App-context.xml определяет приблизительно 1 000 Бобов.

Это приложение запускает с 175 МБ PermGen, который постоянно увеличивается до ~250MB за несколько часов, остается тот путь, пока Штатное Поколение не достигло ~780 МБ, затем permgen переходы к ~500MB, в то время как Старый Генерал опускается ~500MB.

Это вынуждает меня перезапустить Приложение на ежедневной основе и дает мне реальную панику вырисовывающейся Ошибки OutOfMemory.. Любое понимание было бы очень полезно.

Спасибо Gala101

13/может: кто-то мог пролить свет на то, что происходит, когда 'Старый Генерал' собран "мусор"?
jvm помещает наборы от 'Старого Генерала' в PermGen?
Мой скачок PermGen прибывает только, когда набор происходит от 'Старого Генерала', также уменьшение в размере OldGen тесно соответствует увеличению размера PermGen.
PS: Я не делаю, любой живет, развертывают/не развертывают, поскольку это, несомненно, съест PermGen.
Ниже текущий spanshot от моей контрольной страницы: (зафиксированная часть только что спрыгнула с ~250 МБ к 500 МБ),

    PS Perm Gen
Type    Non-heap memory
Usage   init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Peak Usage  init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Collection Usage    init = 16777216(16384K) used = 252421536(246505K) committed = 504954880(493120K) max = 629145600(614400K)
7
задан Gala101 13 May 2010 в 11:40
поделиться

3 ответа

Я бы последовал совету Леона и проанализировал, что отнимает столько памяти. Бьюсь об заклад, у вас какая-то неприятная утечка памяти.

Вы говорите, что не выполняете никакой причудливой загрузки классов, но Hibernate генерирует некоторые классы на лету для вас. Вы используете некоторые функции АОП (например, из модуля Spring AOP?).

По сути, если у вас заканчивается пространство PermGen, то кажется, что ваше приложение продолжает создавать новые классы (потому что это классы, которые хранятся в PermGen).

2
ответ дан 7 December 2019 в 18:40
поделиться

Используйте jmap для создания дампа памяти перед перезапуском сервера и анализа с помощью Eclipse MAT

0
ответ дан 7 December 2019 в 18:40
поделиться

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

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

http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java

0
ответ дан 7 December 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: