jstack: целевой процесс не отвечает - PullRequest
44 голосов
/ 14 сентября 2011

Я использую Ubuntu Server Edition и хочу получить дамп потока Tomcat.

Итак, я сначала попытался выяснить, какой PID использует tomcat:

$ jps -l
5809 sun.tools.jps.Jps

а его там нет?

Итак, я использовал top и обнаружил PID 5730.

Затем я вызвал jstack, чтобы получить дамп потока:

$ sudo jstack -l 5730
5730: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

Что происходит? : - (

Я уже пытался экспортировать CATALINA_TMPDIR, как описано в Jstack и Jstat перестали работать с обновлением до JDK6u23 , но это ничего не изменило:

$ export CATALINA_TMPDIR=/tmp
$ sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6
   ...done.
 * Starting Tomcat servlet engine tomcat6
   ...done.
$ sudo jstack -l 5934 // new PID after restart
5934: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

Обновление:

Я также пытался sudo -u tomcat6 jstack -l -F 5730 > threaddumpexceptions2.txt, но это дает мне только кучу исключений на консоли.

Ответы [ 9 ]

67 голосов
/ 28 сентября 2011

Я получил его, сделав две вещи:

  1. Изменен вызов: sudo -u tomcat6 jstack -J-d64 -m pid
  2. Заменен OpenJDK на оригинальные Sun-sun-6-jdk и sun-6-jre Sunпакеты

Объяснение для части 1: Я переключился в 64-битный режим, использовал sudo и запустил команду от имени пользователя Tomcat.

Примечание: Часть 2 может быть необязательной.Некоторым пользователям кажется, что первой части достаточно.На самом деле, попробуйте сначала добавить только команду sudo.Это может уже сработать.

30 голосов
/ 14 сентября 2011

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

Этот отчет об ошибке также может быть полезен: https://bugs.launchpad.net/ubuntu/+source/sun-java6/+bug/597098

3 голосов
/ 24 сентября 2011

@ Valmar, я нахожу ту же тему сообщения здесь. Невозможно получить дамп потока?Любые идеи, почему мое приложение блокирует?

Кажется, что обходной путь - sudo -u tomcat6 kill -3 <pid>.

1 голос
/ 21 июля 2015

Попробуйте переключиться на пользователя процесса, а затем используйте jstack:

sudo -u {пользователь процесса} jstack> dump

1 голос
/ 01 мая 2014

Я считаю полезным использовать что-то вроде 'ps -eo pid, user, command |grep java ', чтобы найти фактическую используемую команду java, затем используйте каталог, чтобы найти соответствующий jstack и т.д.su этому пользователю и запустите команду jstack и т. д. из этого же каталога.(т. е. / usr / lib / jvm / java / bin / jstack

Полезно, когда вы находитесь на сервере с различными различными установками / реализациями Java.

1 голос
/ 05 апреля 2012

Это также сработало для меня:

sudo -u tomcat6 kill -3 pid

Похоже, ничего не происходит, но когда вы смотрите в журналах, там стеки. Они выглядят как исключения, если вы их не ожидаете.

0 голосов
/ 11 апреля 2018

Для тех, кто нашел этот ответ через шесть лет после того, как его спросили, и они находятся на CentOS 7 , обратите внимание, что SELinux остановит jmap от записи дампов кучи, так как из коробки он запретит запись всокет, если каталог не имеет тип tomcat_tmp_t.

В моем случае я записываю свои дампы кучи в /usr/share/tomcat/.jmap.Этот каталог принадлежит моему пользователю во время выполнения.

Поэтому, чтобы разрешить jmap писать в этот каталог:

semanage fcontext -a -t tomcat_tmp_t "/usr/share/tomcat/.jmap(/.*)?"
restorecon /usr/share/tomcat -vR

, что позволит нам запускаться от имени нашего пользователя tomcat:

jmap -dump:format=b,file=/usr/share/tomcat/.jmap/tomcat-`date +%s`.bin <pid>
0 голосов
/ 28 апреля 2017

Для пользователей Tomcat, имеющих эту проблему, проверьте файл журнала catalina.out.

У меня возникли те же проблемы "22693: Невозможно открыть файл сокета: целевой процесс не отвечает или виртуальная машина HotSpot не загружена".Я сдался и пытался найти что-нибудь о том, что произошло, прежде чем он заблокировался, но затем в файле журнала был вывод jstack.

0 голосов
/ 08 ноября 2014

У меня была такая же проблема, но у меня нет нижеприведенного решения:

jstack <pid>
jstack -J-d64 -m <pid>
sudo -u <user> jstack ...

Я наконец обновил JDK с jdk1.6.0_24 до jdk1.7.0_67 и все работало.

...