Мое приложение показывает растущий размер «Старое поколение» / «Заемное поколение», и когда он достигает максимального предела для «Старого поколения», размер PermGen внезапно увеличивается.
Вот размеры моего поколения:
-Xmx1200m -Xms1200m -Xmn450m -XX:MaxPermSize=600m -XX:+UseParallelGC
Это на 32-битной Fedora, поэтому не может быть больше, чем эта.
Приложение не выполняет какой-либо сложной загрузки классов, хотя использует Spring IOC и Hibernate, Spring App-context.xml определяет около 1000 Beans.
Это приложение запускается с 175 МБ PermGen, который постоянно увеличивается до ~ 250 МБ в течение нескольких часов, остается таким до тех пор, пока Tenured Generation не достигнет ~ 780 МБ, затем permgen скачет до ~ 500 МБ, а Old Gen упадет до ~ 500 МБ.
Это вынуждает меня перезапускать приложение ежедневно и дает мне реальный страх перед надвигающейся ошибкой OutOfMemory. Любое понимание было бы очень полезно.
Спасибо
Gala101
13 / Май: Может, кто-нибудь пролил свет на то, что происходит, когда «Старый Генерал» собирает мусор?
Размещает ли jvm коллекции из 'Old Gen' в PermGen?
Мой всплеск PermGen приходит только тогда, когда происходит сбор из 'Old Gen', также уменьшение размера OldGen близко соответствует увеличению размера PermGen.
PS: я не делаю развертывания / отмены развертывания в режиме реального времени, так как это наверняка поглотит PermGen.
Ниже приведен текущий снимок с моей страницы мониторинга: (обязательная часть только что перепрыгнула с ~ 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)