Как получить полную трассировку стека запущенной java-программы, которая принимает 100% -ный процессор?
У меня есть экземпляр jenkins, который застрял в каком-то бесконечном цикле без видимой активности.
Я могу получить pid запущенного процесса, чтобы как создать трассировку, которую я могу использовать для отчета об ошибке?
Я работаю на Linux.
Ответ 1
Попробуйте jstack. Он даст вам полный список тем, что ваши потоки делают. Все, что ему нужно, это процесс pid.
Ответ 2
Возьмите дамп потока. Подключитесь через визуальную виртуальную машину и запросите дамп. Или если на unix тогда kill -3 pid или на окна Ctrl + Break на консоли процесса сделает это за вас. Свалка идет прямо к консоли. Вы также можете использовать jstack для сброса дампа.
Ответ 3
Ctrl+\ в linux (который отправляет SIGQUIT)
Ctrl+Break на окнах (который отправляет SIGBREAK в MSVCRT)
Ответ 4
В * nix, с помощью top, нажав H, вы можете видеть потоки.
Затем с jps вы можете увидеть, что pid помните, что если процесс был запущен с привилегиями, вы должны выполнить его с помощью sudo, например.
Если вы берете идентификатор потока и преобразуете его в шестнадцатеричный, то вы можете пересечь эти данные с выходом jstack pid.
Оба инструмента находятся в $JAVA_HOME/bin.
Ответ 5
Взгляните на VisualVM. С ним есть много хороших инструментов для профилирования, и вы можете выполнить дамп потока.