Дамп потока веб-приложений Tomcat - PullRequest
4 голосов
/ 17 февраля 2010

У меня есть производственное веб-приложение (Struts, iBatis, Hibernate), которое работает в Tomcat, которое зависает при обслуживании запросов после 6-7 дней работы, но снова работает нормально после выполнения дампа потока.

Мне трудно понять, почему это так.

Мне было просто интересно, сталкивался ли кто-нибудь еще с чем-то подобным.

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

Может быть, это поможет вам найти причину вашей проблемы.

Я включил JMX на Tomcat (установите эти необязательные аргументы vm при запуске tomcat) -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 30188 (любой порт, на котором вы хотите запустить jmx для tc) -Dcom.sun.management.jmxremote.ssl = ложь -Dcom.sun.management.jmxremote.authenticate = ложь

Затем я написал небольшое приложение, которое отслеживает использование памяти (через jmx) и уведомляет меня, если использование памяти заканчивается, скажем, 80%.

Я бы тогда знал, как только что-то пойдет не так. Затем я получу гистограмму для объектов в памяти (для получения информации см. http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html).

В конце оказалось, что один из моих запросов ejbQL вызвал использование огромного количества памяти.

Надеюсь, это может помочь ... ...... 1013 *

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

Прежде всего попробуйте воспроизвести это в тестовой среде. Вы можете использовать JMeter , чтобы подчеркнуть приложение. Вы можете запустить tomcat, используя -verbose: gc и -XX: + PrintGCDetails , которые помогут вам лучше понять, что происходит во время работы GC. Затем, когда сайт не отвечает, вы можете получить дамп потока, и если это разблокирует сайт, посмотрите подробности GC для получения дополнительной информации.

...