Java: Является ли «постоянная» память такой же, как permgen? - PullRequest
2 голосов
/ 02 декабря 2010

Я пытаюсь собрать информацию о случайной проблеме, которая возникает у нас, когда после нескольких недель работы приложение замедляется, работает нормально, замедляется, работает нормально, интервалы между медленной и нормальной работой сокращаются и сокращаются.короче.Моя теория заключается в том, что со временем мы все чаще собираем мусор.Другая ключевая информация заключается в том, что у нас иногда возникали проблемы с OOM PermGen.

Я включил параметр verbose: gc и теперь вижу вывод GC в catalina.out.Я думаю, что мне нужно добавить флаг PrintGCDetails, однако, основываясь на информации здесь:

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

Включено, что последний флаг будет выводить информацию о сборе памяти "Заемщик".Вопрос в том, что это за память, которая вызывает ошибки PermGen, или это что-то другое?И если это не так, как я могу регистрировать информацию, которая покажет пространство PermGen?

РЕДАКТИРОВАТЬ - я не могу подключить ни один из инструментов мониторинга jvm в этой среде, к сожалению.

РЕДАКТИРОВАТЬ -- Я добавил указанные параметры конфигурации, а также один вариант для распечатки при владении печатью, я получаю такие вещи, как

27.701: [GC 27.701: [ParNew
Desired survivor size 2162688 bytes, new threshold 4 (max 4)
- age   1:    1906560 bytes,    1906560 total
- age   2:       2064 bytes,    1908624 total
- age   3:       5064 bytes,    1913688 total
- age   4:     650368 bytes,    2564056 total
: 35684K->2678K(38336K), 0.0068580 secs] 224179K->191173K(1065664K), 0.0069700 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

Является ли поколение ParNew пространством permgen?

и

 (concurrent mode failure): 25387K->31940K(1027328K), 0.2983200 secs] 50714K->31940K(1065664K), [CMS Perm : 35273K->35139K(35392K)], 0.2985210 secs] [Times: user=0.30 sys=0.00, real=0.30 secs] 
 (concurrent mode failure): 25356K->31941K(1027328K), 0.3032690 secs] 50861K->31941K(1065664K), [CMS Perm : 35264K->35129K(35392K)], 0.3034800 secs] [Times: user=0.30 sys=0.00, real=0.31 secs]

неудачи меня беспокоят.

Спасибо заранее

Ответы [ 2 ]

4 голосов
/ 02 декабря 2010

Штатный и PermGen не одно и то же, нет.Они связаны, но не одно и то же.Точные детали зависят от реализации в JVM, которую вы используете, но из документа, на который вы ссылались:

"Третье поколение, тесно связанное с поколением-арендатором, - это постоянное поколение.особенный, потому что он содержит данные, необходимые виртуальной машине для описания объектов, которые не имеют эквивалентности на уровне языка Java. Например, объекты, описывающие классы и методы, хранятся в постоянном поколении. "Строки и сведения о классе и т.п. обычно хранятся в PERM, тогда как долгоживущие объекты Java TENURED.

Вот достойная статья, объясняющая PermGen (и как его настроить): http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

1 голос
/ 02 декабря 2010

Вы стажируете какие-либо строки или загружаете какие-либо классы?

Две вещи, которые у меня были, есть место для пермгена: когда вы интернируете строки, которых не должно быть (таким образом, все виды не подлежащих сборке строк меняются), и старые определения классов, вызванные загрузкой в ​​новые классы (обычно из Tomcat передислокация, через дюжину или около того это может произойти для нас).

Кажется, я помню, что Tomcat 6 лучше справлялся с проблемой повторного развертывания, и 7 должен был это исправить, но это не в моей голове.

Используете ли вы какие-либо внешние библиотеки или библиотеки собственного кода? Я не удивлюсь, если утраченные ими ресурсы будут считаться с permgen (только предположение).

...