Ответ 1
Команда jstack
может получить дамп потока программы, запущенной на удаленной машине, а также работает в Windows.
kill -3
работает только с локальными программами, а в Windows нет kill
.
Я хочу получить дамп потока моего веб-приложения, который работает на сервере jboss.
Я нашел два решения для своей проблемы:
Может ли кто-нибудь объяснить мне разницу между этими двумя методами?
Заранее спасибо !
Команда jstack
может получить дамп потока программы, запущенной на удаленной машине, а также работает в Windows.
kill -3
работает только с локальными программами, а в Windows нет kill
.
На странице оракула jstack:
Выход из опции jstack pid такой же, как и при нажатии Ctrl+\на консоли приложения (стандартный ввод) или путем отправки процессу сигнала QUIT.
Также помните, что Ctrl+\ is equivalent to a SIGQUIT
.
Из того, что убивает -3 (unix.se):
kill -l показывает нам все сигналы. После этого намека 3 означает SIGQUIT
Таким образом, в основном оба они выполняют точно то же самое, то есть запрашивают coredump. Вот несколько указателей, связанных с jstack:
Что касается официальной поддержки, со страницы jstack man:
Распечатывает трассировки стека потоков Java для процесса Java, основного файла или удаленного сервера отладки. Эта команда является экспериментальной и неподдерживаемой.
Эта утилита не поддерживается и может быть недоступна в будущей версии JDK. В системах Windows, где отсутствует файл dbgeng.dll, необходимо установить средства отладки для Windows, чтобы эти инструменты работали.
Что касается разности выходных данных, то это в основном то же самое. Между выходами имеется одно к одному. См. Мой вывод для того же приложения, чтобы продемонстрировать сопоставление между статусами kill -3
и jstack
. Отображение между состояниями:
kill -3 | Jstack
------------------------------
RUNNABLE | IN_NATIVE
TIMED_WAITING | BLOCKED
WAITING | BLOCKED (PARK)
В Windows у вас есть что-то, называемое taskkill/PID {pidpid}/F для процесса killin. Идентификатор процесса можно получить из команды netstat или использовать viusal vm, чтобы узнать идентификатор процесса