Неожиданное использование кучи в приложении J2EE Struts - PullRequest
1 голос
/ 15 февраля 2010

У меня есть несколько запросов относительно использования кучи в моем приложении. В некоторых случаях наблюдается, что активность пользователя минимальна (или равна нулю) в выходные дни, но использование кучи линейно возрастает, достигает порогового значения, приводящего в действие GC. Я хочу проанализировать причину использования этой кучи и подтвердить, нормально ли это и ожидается , Предполагая отсутствие активности пользователя, это использование кучи может быть вызвано процессом демона, таким как процесс демона моего приложения или потоки Weblogic. Как я могу подтвердить, какой процесс-демон вызывает такое поведение, и нужно ли что-то сделать для его устранения?

Я тщательно протестировал процесс демона моего приложения и довольно уверен, что он не использует кучу неправильно. Но что я могу сделать с процессом демона Weblogic? Должен ли я жить с этим или дать ему бой?

РЕДАКТИРОВАТЬ: Я работаю на Weblogic 10.3 с BEA JRockit 1.6. Линейный рост использования кучи наблюдается примерно за 20 часов до запуска сборщика мусора. Я проверил процесс моего приложения с помощью JProbe и не обнаружил никаких утечек в этом.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2010

Я бы определенно попытался найти решение проблемы (которая, вероятно, есть в вашем коде, а не в WebLogic). Проблема в том, что вы не предоставили подробных сведений о вашей среде (например, версия WLS, версия Java, платформа) или вашей проблеме (например, сколько времени требуется до GC), поэтому немного сложно дать руководство, но ...

Если это вариант, я бы использовал VisualVM для анализа этой утечки памяти (или профилировщика по вашему выбору). Если возможно, попытайтесь воспроизвести проблему в локальной среде, это будет легче. Если нет, вот URL JMX:

service:jmx:iiop:///jndi/iiop://host:port/weblogic.management.mbeanservers.runtime

Обязательно включите Анонимный поиск администратора : перейдите на Домен> Безопасность> Общие и установите флажок Анонимный поиск администратора включен ).

Также убедитесь, что Включен протокол IIOP для Сервера администрирования и серверов приложений : перейдите на Сервер> Протокол и установите флажок IIOP ). Также убедитесь, что

Другой вариант - взять несколько дампов кучи и проанализировать их с помощью такого инструмента, как Eclipse MAT.

Обновление: Поскольку до GC требуется около 20 часов, я бы запланировал задачу по созданию некоторых дампов кучи (например, по одному в час) и анализировал их, чтобы выяснить, какие объекты со временем потребляют память. Это может дать подсказку о виновном процессе.

1 голос
/ 10 марта 2010

Посмотрите на prstat на коробке для любых других заданий, работающих в выходные дни. Весьма распространено, что задания cron / backup и т. Д. Запускаются и попадают на ваш сервер, и команда заранее забыла, почему они были настроены.

1 голос
/ 19 февраля 2010

Похоже на нормальное поведение сервера J2EE. Даже если ваши приложения вообще не загружаются, на сервере будет определенная активность (ведение домашнего хозяйства, мониторинг и т. Д.), Которая будет продолжать создавать объекты. Даже активность анализа использования кучи, как вы делаете, будет создавать объекты.

Я думаю, что скорость создания объекта очень минимальна, учитывая тот факт, что для заполнения кучи и запуска цикла GC требуется 20 часов. Немного больше информации о вашей заботе может помочь

т.е. - Вы получаете ошибки OutOfMemory - Каковы параметры запуска JVM? (Размеры кучи, тип сборщика мусора и т. Д.)

...