Вопрос по java – Как получить полную трассировку стека работающей Java-программы, которая принимает 100% процессоров?

21

У меня есть экземпляр jenkins, который застрял в каком-то бесконечном цикле без какой-либо видимой активности.

Я могу получитьpid запущенного процесса, так как мне сгенерировать трассировку, которую я могу использовать для сообщения об ошибке?

Я работаю на Linux.

Ваш Ответ

5   ответов
10

и если на Unix тоkill -3 pid или на окнахCtrl+Break на консоли процесса сделает это за вас. Отвал идет прямо к консоли. Вы также можете использовать jstack, чтобы бросить дамп.

kill -3 pid отлично работает, спасибо! Для тех, у которых JVM работает на «экране»: ctrl-a H (заглавными буквами) запускает / останавливает запись в файл.
4

top нажавH  Вы можете увидеть темы.

Затем сjps Вы можете увидетьpid имейте в виду, что если процесс был запущен с привилегиями, вы должны выполнить его сsudo например.

Если вы берете идентификатор потока и конвертируете его в шестнадцатеричное, то вы можете пересечь эти данные с помощьюjstack pid выход.

Оба инструмента находятся в$JAVA_HOME/bin.

29

jstack, Это даст вам полный список того, что делают ваши темы. Все, что ему нужно, это процесс PID.

Недавно jstack перестал работать, и я не уверен, почему. Вот связанный вопросstackoverflow.com/questions/31179544/… sorin
Это сужает это до некоторой степени. Если вы используете процессор на 100%, вы хотите искать потоки, которые не находятся в состоянии BLOCKING. Например, поток 30609 - это sun.nio.ch.EPollArrayWrapper.epollWait, который потенциально может соответствоватьthis defect в зависимости от вашей конфигурации.
Я не уверен, поможет ли это в моем случае, но он отвечает на вопросpastebin.com/r1e0dtzp sorin
4

Ctrl+\ на Linux (который отправляетSIGQUIT)

Ctrl+Break на окнах (который отправляетSIGBREAK под MSVCRT)

2

VisualVM, С ним есть много хороших инструментов профилирования, и вы можете выполнить дамп потока.

Похожие вопросы