Мы пытаемся настроить сервер HP UX для запуска некоторых пакетных заданий на Java. Проблема в двух словах такова:
Эти пакетные задания выполняются на сервере приложений Jeus (продукт Made in Korea). Хотя большинство заданий выполняются вовремя, некоторые пакетные задания сообщают о знаменитой ошибке PermGen Out of Memory Error. Мы получили дамп кучи и начали рассматривать параметры JVM. Они следующие: Xms - 2048м Xmx - 2048м PermSize - 512м MaxPermSize - 512м. Старым сборщиком GC является CMS, а сборщиком нового поколения является Parallel Collector.
Мы заметили, что фактический размер кучи вполне нормальный и что PErm Gen исчерпал все свои 512 м памяти. HPJmeter показал, что это был постепенный рост памяти, и, следовательно, мы заподозрили утечку памяти. Мы просмотрели все загрузчики классов и обнаружили около 168 экземпляров основного ClassLoader сервера приложений Jeus. Средство оценки утечки памяти показало, что этот загрузчик классов имел утечку памяти. Он показал, что количество удерживаемых байтов составляло всего около 3 МБ.
Мы посмотрели на количество классов/типов, загруженных этим загрузчиком классов, и их было около 512 элементов. Утечка памяти также показала, что некоторые другие объекты вовлечены в утечку памяти.
У меня есть следующие вопросы:
- Теперь, когда обнаружен утечка Classloader, как нам определить точную ссылку(и), которая вызывает проблему?
- Если один загрузчик класса с определенным идентификатором объекта отображается как утечка памяти, возможно ли, что другие экземпляры одного и того же загрузчика класса пропускают некоторый различный объем памяти?
- Любое руководство относительно того, что делать дальше, будет высоко оценено.
Адитья.