Возьмите дамп приложения без перезагрузки Tomcat

Мне пришлось создать дамп потока веб-приложения в tomcat, запущенного как сервис, без необходимости перезапуска tomcat. Я пытался присоединить jconsole, jvisualvm, jstack, но безуспешно.

  • Tomcat не поддерживает JMX Remote. (Но не могу ввести свойства - не могу перезапустить его)
  • Я пытался запускать приложения от того же пользователя, что и сервис, менять папки TEMP, TMP
  • Я хочу выполнить его локально - на том же сервере, что и tomcat, так как никакая конфигурация не требуется (следовательно, не требуется перезапуск) ("Примечание. Эта конфигурация необходима, только если вы собираетесь осуществлять мониторинг Tomcat удаленно. Она не нужна, если вы собираетесь контролировать его локально, используя того же пользователя, с которым работает Tomcat.")
  • В jConsole процесс отображается серым цветом, иногда не виден - не может его прикрепить
  • В jStack: недостаточно памяти или недостаточно привилегий для подключения
  • Tomcat работает на Windows-машине

Есть идеи?

3 ответа

Решение

Я бы порекомендовал jcmd, но я думаю, что у него те же проблемы с локальным присоединением, что и с jstat и другими инструментами.

Согласно следующим двум попаданиям Google, "psexec -s jstack PID" кажется решением (которое я не пробовал)

https://www.assetbank.co.uk/support/documentation/knowledge-base/how-to-take-a-java-thread-dump/ https://access.redhat.com/solutions/19170

Если работает на Unix, отправьте kill -3 <pid>, Это напечатает дамп потока в catalina.out,

Вы должны быть тем же пользователем, что и служба Tomcat.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

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