2010-02-15 3 views
1

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

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

EDIT: Я работаю на Weblogic 10.3 с BEA JRockit 1.6. Линейное увеличение использования кучи наблюдается примерно за 20 часов до запуска сборщика мусора. Я тестировал процесс своего приложения с помощью JProbe и не обнаружил никаких утечек.

ответ

2

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

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

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

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

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

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

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

+0

Спасибо за ваш вклад, я добавил более подробные сведения в мой вопрос. –

1

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

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

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

1

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

+0

Хмм ... yep звучит логично. Послушай, спасибо. –

Смежные вопросы