Веб-приложение Tomcat 6 потребляет память с течением времени - PullRequest
1 голос
/ 10 сентября 2011

У меня есть приложение Grails, которое развернуто на сервере Tomcat 6. Некоторое время приложение работает нормально (день или два), но со временем постепенно расходует все больше и больше памяти, пока не остановится, а затем превзойдет максимальное значение. Как только я перезагружаю контейнер, все в порядке. Я проверял это с помощью плагина Grails JavaMelody, а также плагина Application Info, но мне нужна помощь в определении того, что я должен искать.

Звучит как утечка приложений, но, насколько мне известно, нет доступа к каким-либо неуправляемым ресурсам. Кроме того, похоже, что кэш Hibernate находится под контролем. Похоже, что при запуске сборщика мусора я получаю приличный кусок памяти обратно, но я не знаю, как сделать это устойчиво.

Итак:

  • Как я могу использовать эти (или другие) инструменты мониторинга, чтобы выяснить, где проблема?
  • Есть ли другой совет, который может мне помочь?

Большое спасибо.

EDIT

Я использую Grails 1.3.7 и плагин Quartz.

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Вы можете использовать приложение VisualVM в Oracle JDK для подключения к экземпляру Tomcat во время работы (если уже используется Oracle JVM) для проверки того, что происходит.Профилировщик памяти может рассказать вам немного и направить вас в правильном направлении.Скорее всего, вы ищете растущие объекты или типы объектов, которые выделяются все больше и больше.

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

1 голос
/ 10 сентября 2011

В зависимости от того, как вы используете Quartz, это может быть напрямую связано с известной утечкой памяти с плагином Quartz с постоянством и локальностью потока.Вы можете перепроверить и посмотреть, относится ли это к вашей ситуации.

...