kill -3, чтобы получить java thread dump

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

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

 jstack PID > outfile 

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

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

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

С Java 8 в изображении jcmd является jcmd .

 jcmd  Thread.print 

Ниже приведен fragment из документации Oracle :

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

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

В том же месте, где размещена стандартная версия JVM. Если у вас есть сервер Tomcat, это будет файл catalina_(date).out .

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

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

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

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

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

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

Шаги, которые следует выполнить, если вы хотите, чтобы дамп streamа вашего Java-процесса StandAlone

Шаг 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 
  • Явная блокировка Java
  • Может ли x86 переупорядочить узкий магазин с более широкой нагрузкой, которая полностью его содержит?
  • Тема против ThreadPool
  • Убедитесь, что синхронизированные блокировки Java выполнены в порядке?
  • Использование памяти в C #
  • C # версия синхронизированного ключевого слова java?
  • Почему в OpenMP запрещен оператор! =?
  • Надуть представление в фоновом streamе
  • Как остановить stream, созданный при реализации runnable-интерфейса?
  • Как использовать свойство CancellationToken?
  • Нечетная печать с использованием нити
  • Interesting Posts

    Является ли «Безопасность доступа к коду» для любого реального мира?

    Могу ли я изменить путь и каталог «hiberfil.sys» в Windows 8 из-за сокращения моего использования диска C: \?

    Что такое CFI-директивы в Gnu Assembler (GAS)?

    Доступ к массиву за пределами границ не дает ошибки, почему?

    Что происходит в BeginProcessRequest ()?

    Сортировка четырех точек по часовой стрелке

    TargetedPatchingOptOut: «Производительность критична для встроенных границ графических изображений NGen»?

    Как я могу заставить мой браузер лгать о моей операционной системе?

    Разница между Label и TextBlock

    Spinner onItemSelected () выполняет ненадлежащим образом

    Как указать динамические имена полей в предложении Linq where?

    Как сопоставить числовые данные в категории / корзины в кадре данных Pandas

    Как разрешить Java UnknownHostKey при использовании библиотеки SFTP JSch?

    Каково правило для скобок в вызове метода Scala?

    Фиксирование медленной начальной нагрузки для IIS

    Давайте будем гением компьютера.