Как получить отладочную информацию о потоке из запущенного производственного веб-приложения Tomcat? - PullRequest
3 голосов
/ 02 сентября 2011

У нас есть производственное веб-приложение, которое, похоже, застряло в потоке, выполняя кучу работы, загружая процессор и усредняя нагрузку.Я в значительной степени знаю, в чем проблема - наш сервис DWR преобразует что-то чрезвычайно большое в ответ объекта Javascript.Проблема в том, что я не знаю, какой сервисный вызов создает этот большой объем данных, потому что поток находится за пределами любого моего кода (он находится в сервлете DWR, преобразующем мое возвращаемое значение в исходящий объект javascript ... в противном случае я мог бысм. мой метод обслуживания в дампе потока).

Вам не нужно знать о DWR, чтобы помочь мне, потому что мой вопрос таков:

Это какой-то способ для меня посмотретьв развернутое веб-приложение (Tomcat 6) и посмотрите, в каком состоянии находится поток, например, значения переменных и т. д.?Было бы идеально, если бы я мог взять в основном «отладочный моментальный снимок» потока, как если бы у меня была точка останова в режиме отладки во время локальной разработки, но любое решение, которое позволило бы мне увидеть или распечатать значение чего-либо, было бы полезно.

Спасибо!

ОБНОВЛЕНИЕ

Если можно не перезагружать сервер, это будет лучше, поскольку эта проблема возникает только один разчерез некоторое время, и перезапуск заставляет проблему уйти.Похоже, JProfiler требует добавления опции -agentpath в JVM, поэтому мне нужно было бы перезапустить ее.

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

Да, вы можете подключить Visual VM 1.3.2 со всеми загруженными и установленными плагинами, чтобы видеть состояние каждого потока, поколения в куче и т. Д.

0 голосов
/ 02 сентября 2011

Вы также можете отправить сигнал SIGQUIT (цифровой код 3) в процесс java вашего экземпляра Tomcat, например, выполнив kill -3 <pid>.Это заставляет java выгружать стеки всех потоков в sysout - это НЕ останавливает процесс, даже если имя может подразумевать это.

0 голосов
/ 02 сентября 2011

Вы можете открыть источник в eclipse и подключить удаленный отладчик.Это действительно не отличается от любого другого приложения Java. Статья удаленной отладки .Вы можете вставлять точки останова в приложение и приостанавливать потоки по желанию.

Другой вариант - это профилировщик, такой как JProfiler, Yourkit или VisualVM.Эти инструменты позволяют вам создавать дампы потоков, где вы можете исследовать состояние всех запущенных потоков и их мониторов.Кроме того, вы можете наблюдать за тем, как потоки работают в режиме реального времени, видеть, сколько времени они активны, когда и как долго они спят, и сопоставлять эту информацию с дампами потоков, чтобы получить представление о том, на что ваше приложение тратит свое время.Что может быть трудно получить с помощью профилировщика - это состояние отдельных переменных.

...