2012-03-14 6 views
1

У меня есть автономное приложение java, работающее на Linux + Java 6, которое, кажется, застревает (никаких журналов не создается) Как я могу взять дамп этого потока, не используя любой другой инструмент (например. jstack)thread dump автономного приложения java

Пытался ниже команд, но они ничего

kill -3 <pid> 
kill -QUIT <pid> 

я упускаю ничего не делает?

+1

Хорошо. Понял. «Ctrl + \» дает мне свалку. –

+0

Пожалуйста, преобразуйте свой комментарий в ответ и само-принимайте его. –

+0

'kill -3' также должен работать. Единственный раз, когда это не работает, когда вы не видите консоль. –

ответ

0

Вы можете использовать Java VisualVM (входит в каждый каталог bin JDK) и подключаться через JMX. Просто добавьте

-Dcom.sun.management.jmxremote.port=PORT 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

к вашим параметрам запуска JVM (на удаленном хосте) и включите аутентификацию.

Затем запустите VisualVM (у вашего клиента) и добавьте соединение.

Смотрите здесь: http://visualvm.java.net/docindex.html

+0

Работает на удаленном сервере, и у него нет VisualVM. –

+0

На удаленном сервере вам нужно включить поддержку jmx, показанную выше. Разве ваш клиент не использует xserver? – Stefan

0

Получить идентификатор процесса из команды jps (хотя и не обязательно).

Вы пытались с привилегиями root? Если процесс java был инициирован с правами root (или daemon), вы должны принять это во внимание.

# kill -3 <pid> 
$ sudo kill -QUIT <pid> 

Вы также можете увидеть резьбу в top выходе нажатием H (не h).

Затем, если вы идентифицируете застрявший, вы можете захватить pid, сделать шестнадцатеричный, а затем с jstack увидеть трассировку стека.

С уважением.

+0

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

+0

Как насчет этого 'kill -9' (SIGKILL)? Это безоговорочно убьет процесс. –

+0

@ Christian.K Я думаю, что он хочет дамп потока, а не просто убить процесс. – ssedano

Смежные вопросы