убить -3, чтобы получить дамп потока java



Я использую kill -3 команда для просмотра дампа потока JVM в unix. Но где я могу найти выход этого

659   9  

9 ответов:

вы можете также использовать jstack (входит в комплект JDK), чтобы взять дамп потока и записать вывод везде, где вы хотите. Это не доступно в среде Unix?

jstack PID > outfile

дамп потока записывается в систему из виртуальной машины, на которой вы выполнили убийство -3. Если вы перенаправляете консольный вывод JVM в файл, дамп потока будет находиться в этом файле. Если JVM работает в открытой консоли, то дамп потока будет отображаться в консоли.

есть способ перенаправить вывод дампа потока JVM на сигнал разрыва для разделения файла с опция диагностики LogVMOutput:

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log

С Java 8 на рисунке, jcmd предпочтительный подход.

jcmd <PID> Thread.print

Ниже приведен фрагмент документация Oracle:

выпуск JDK 8 представил Java Mission Control, Java Flight Recorder и утилиту jcmd для диагностики проблем с приложениями JVM и Java. предлагается использовать последнюю утилиту jcmd вместо предыдущей утилиты jstack для улучшенной диагностики и снижения производительности накладные расходы.

однако доставка этого с приложением может иметь последствия лицензирования, которые я не уверен.

в том же месте, где находится stdout JVM. Если у вас есть сервер Tomcat, это будет .

при использовании kill -3 следует видеть дамп потока в стандартном выходе. Большинство серверов приложений записывают стандартный вывод в отдельный файл. Вы должны найти его там при использовании kill -3. Существует несколько способов получения дампов потоков:

  • Kill -3: дает выход к стандартному выходу.
  • Если у вас есть доступ к окну консоли, где работает сервер, можно использовать комбинацию клавиш Ctrl + Break для создания трассировки стека на std выход.
  • для виртуальной точки доступа мы можем использовать команду jstack, чтобы генерировать дамп потока. Это часть JDK. Синтаксис выглядит следующим образом: Использование: jstack [- l] (для подключения к запущенному процессу) jstack-F [- m] [- l] (для подключения к зависшему процессу)
  • для виртуальная машина JRockit JVM в мы можем использовать команду JRCMD, который поставляется с JDK для синтаксис: jrcmd [ []] [л] [-F файл] [-р] -ч]

в Jboss вы можете выполнить следующее

nohup $JBOSS_HOME/bin/run.sh -c  yourinstancename $JBOSS_OPTS >> console-$(date +%Y%m%d).out  2>&1 < /dev/null &
kill -3 <java_pid>

это перенаправит ваш вывод / threadump в файловую консоль, указанную в приведенной выше команде.

  1. найти идентификатор процесса [PS ID]
  2. выполнить поток jcmd [PS ID].печати

шаги, которые вы должны следовать, если вы хотите дамп потока вашего автономного процесса Java

Шаг 1: получить идентификатор процесса для сценария оболочки, вызывающего программу java

linux$ ps -aef | grep "runABCD"

user1  **8535**  4369   0   Mar 25 ?           0:00 /bin/csh /home/user1/runABCD.sh

user1 17796 17372   0 08:15:41 pts/49      0:00 grep runABCD

Шаг 2: получить идентификатор процесса для дочернего элемента, который был вызван runABCD. Используйте выше PID, чтобы получить детей.

linux$ ps -aef | grep **8535**

user1  **8536**  8535   0   Mar 25 ?         126:38 /apps/java/jdk/sun4/SunOS5/1.6.0_16/bin/java -cp /home/user1/XYZServer

user1  8535  4369   0   Mar 25 ?           0:00 /bin/csh /home/user1/runABCD.sh

user1 17977 17372   0 08:15:49 pts/49      0:00 grep 8535

Шаг 3: получить JSTACK для конкретного процесса. Получите идентификатор процесса вашего XYSServer процесс. т. е. 8536

linux$ jstack **8536** > threadDump.log

Comments

    Ничего не найдено.