Java - Как программно получить трассировку стека на удаленном процессе - PullRequest
1 голос
/ 22 февраля 2011

Как вы можете из программы Java получить трассировку стека в известном потоке, работающем на удаленной виртуальной машине?

Нужно ли запускать удаленную JVM с какими-либо специальными коммутаторами?

1 Ответ

4 голосов
/ 22 февраля 2011

Вам действительно нужно делать это программно изнутри Java (я полагаю, так, учитывая, что ваш вопрос так явно говорит)?

В любом случае, просто не используйте, тогда в Linux вы можете просто сделать это в командной строке:

kill -3 <pid>

EDIT: для программного доступа запустите приложение с включенным JMX, подключитесь к нему через JMX и используйте ThreadMXBean.getThreadInfo , чтобы получить трассировку стека для каждого запущенного потока.

Если у вас есть несколько JVM на одной и той же машине, для каждой из них нужен собственный отдельный порт JMX, вы можете справиться с этим, многократно пытаясь выбрать его из пула, наугад и выйдя из него.

См. здесь для пошагового создания собственного клиента JMX.

...