Я использую kill -3
команду, чтобы увидеть дамп потока JVM в unix. Но где я могу найти вывод этой kill
команды? Я потерян!!
java
multithreading
dump
javanerd
источник
источник
Ответы:
В качестве альтернативы вы можете использовать jstack (входит в состав JDK), чтобы получить дамп потока и записать результат в любом месте. Разве это не доступно в среде unix?
источник
Дамп потока записывается в систему из виртуальной машины, на которой вы выполнили
kill -3
. Если вы перенаправляете вывод консоли JVM в файл, дамп потока будет в этом файле. Если JVM работает в открытой консоли, дамп потока будет отображаться в ее консоли.источник
Существует способ перенаправить вывод дампа потока JVM при сигнале прерывания в отдельный файл с помощью диагностической опции LogVMOutput :
источник
С Java 8 на картинке
jcmd
это предпочтительный подход.Ниже приведен фрагмент документации Oracle :
В выпуске JDK 8 представлены Java Mission Control, Java Flight Recorder и утилита jcmd для диагностики проблем с JVM и приложениями Java. Рекомендуется использовать последнюю версию утилиты jcmd вместо предыдущей утилиты jstack для расширенной диагностики и снижения накладных расходов на производительность.
Однако доставка этого вместе с приложением может иметь последствия для лицензирования, в чем я не уверен.
источник
jcmd
не удается подключиться к процессу обслуживания окна сcom.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
покаjstack -F
преуспевает: stackoverflow.com/questions/1197912/...В том же месте, где размещен стандартный вывод JVM. Если у вас есть сервер Tomcat, это будет
catalina_(date).out
файл.источник
При использовании kill -3 в стандартном выводе должен отображаться дамп потока. Большинство серверов приложений записывают стандартный вывод в отдельный файл. Вы должны найти его там, используя kill -3. Есть несколько способов получить дамп потоков:
kill -3 <PID>
: Выводит вывод на стандартный вывод.Для виртуальных машин хот-спотов мы также можем использовать
jstack
команду для создания дампа потока. Это часть JDK. Синтаксис следующий:источник
kill -3 <PID>
следует убивать JVM. Какой тип Java-приложения вы ищете?В Jboss вы можете выполнить следующее
Это перенаправит ваш вывод / поток на консоль файла, указанную в приведенной выше команде.
источник
источник
Действия, которые следует выполнить, если вы хотите получить дамп потока автономного Java-процесса
Шаг 1. Получите идентификатор процесса для сценария оболочки, вызывающего java-программу.
Шаг 2: Получите идентификатор процесса для дочернего процесса, который был вызван runABCD. Используйте указанный выше PID, чтобы получить дочерние элементы.
Шаг 3: Получите JSTACK для конкретного процесса. Получите идентификатор процесса вашего процесса XYSServer. т.е. 8536
источник