Пустые дампы потоков Tomcat с использованием jstack

Пытаясь собрать дамп потока Apache Tomcat8.5 на сервере Windows, я закончил с использованием jstack с psexec следующим образом (поскольку использование jstack напрямую было невозможно, поэтому я использую pexec для выполнения jstack с использованием процесса syetm):

PsExec.exe -s "C:\Program Files\Java\jdk1.7.0_40\bin\jstack.exe" -l 5340 > dumps.txt

с 5340 — это PID запущенного процесса Tomcat8.

Выполнение началось без каких-либо ошибок, и он показывает этот вывод:

PsExec.exe -s "C:\Program Files\Java\jdk1.7.0_40\bin\jstack.exe" -l 5340 > dumps.txt

 PsExec v2.2 - Execute processes remotely Copyright (C) 2001-2016 Mark Russinovich Sysinternals - www.sysinternals.com

Starting C:\Program Files\Java\jdk1.7.0_40\bin\jstack.exe on VMNAME...

Когда я проверяю dumps.txt, я нахожу его пустым, даже если запускаю командную строку от имени администратора.

введите здесь описание изображения

Спасибо за вашу помощь!


person Sadmi    schedule 14.11.2019    source источник
comment
вам нужны инструменты PsExec? Не могли бы вы запустить jstack напрямую, а в случае ошибок использовать параметр -F?   -  person Andre Albert    schedule 14.11.2019
comment
jstack.exe -F -l 5340 › mydumps.txt Присоединение к процессу с идентификатором 5340, подождите... ... Вызвано: sun.jvm.hotspot.runtime.VMVersionMismatchException: Поддерживаются версии 24.0-b56. Целевая виртуальная машина 25.231-b11 ....   -  person Sadmi    schedule 14.11.2019
comment
вам нужно использовать ту же виртуальную машину (версию) для вызова jstack, что и виртуальная машина, на которой в настоящее время запущен ваш tomcat   -  person Andre Albert    schedule 14.11.2019
comment
@Andre Albert Вы правы, теперь это работает, напишите свой ответ, и я его приму. просто еще один момент jstack пропускает через несколько минут, это нормально или он должен продолжать выполнение, пока я не выйду из него?   -  person Sadmi    schedule 14.11.2019


Ответы (1)


Как итог обсуждения. Вам нужно использовать ту же версию виртуальной машины для выполнения команды jstack, что и версию виртуальной машины, которую вы собираетесь проверять. В случае каких-либо ошибок вы можете попробовать параметр -F для jstack. Кроме того, вам больше не нужны инструменты PsExec на новых виртуальных машинах.

person Andre Albert    schedule 14.11.2019