Дамп потока веб-приложений Tomcat

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

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

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

2 ответа

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

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

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

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

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

Надеюсь, это поможет каким-то образом......

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

Другие вопросы по тегам