web-dev-qa-db-ja.com

実行中のJava 100%CPUを使用しているプログラムの完全なスタックトレースを取得する方法は?

目に見えるアクティビティのない、ある種の無限ループに陥っているjenkinsインスタンスがあります。

実行中のプロセスのpidを取得できるので、バグレポートに使用できるトレースを生成するにはどうすればよいですか?

Linuxで実行しています。

22
sorin

jstack で試してください。スレッドが何をしているかの完全なリストが表示されます。必要なのはプロセスpidだけです。

31
mprivat

スレッドダンプを取得します。 Visual VM=を使用して接続し、ダンプを要求します。または、UNIXの場合kill -3 pidまたはWindows Ctrl + Breakの場合ダンプはコンソールに直接送られ、jstackを使用してダンプをスローすることもできます。

11
Drona

* nixでは、topを押してHを押すと、スレッドが表示されます。

jpsを使用すると、pidを見ることができます。プロセスが特権で開始された場合、たとえばSudoで実行する必要があることに注意してください。

スレッドIDを取得して16進数に変換すると、そのデータをjstack pid出力。

両方のツールは$Java_HOME/bin

4
ssedano

Ctrl+\ Linuxの場合(SIGQUITを送信)

Ctrl+Breakウィンドウ上(MSVCRTでSIGBREAKを送信)

4
pbielicki

VisualVM をご覧ください。多くのニースプロファイリングツールがあり、スレッドダンプを実行できます。

2
Nican