回答:
または、jstack(JDKに付属)を使用してスレッドダンプを取得し、必要な場所に出力を書き込むこともできます。UNIX環境では利用できませんか?
jstack PID > outfile
スレッドダンプは、を実行したVMからシステムに書き込まれますkill -3
。JVMのコンソール出力をファイルにリダイレクトする場合、スレッドダンプはそのファイルにあります。JVMが開いているコンソールで実行されている場合、スレッドダンプがコンソールに表示されます。
LogVMOutput診断オプションを使用して、ブレーク信号のJVMスレッドダンプ出力を別のファイルにリダイレクトする方法があります。
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
画像でjcmd
はJava 8が推奨されるアプローチです。
jcmd <PID> Thread.print
以下は、Oracleのドキュメントの抜粋です。です。
JDK 8のリリースでは、JVMおよびJavaアプリケーションの問題を診断するためのJava Mission Control、Java Flight Recorder、jcmdユーティリティが導入されました。強化された診断とパフォーマンスのオーバーヘッドの削減のために、以前のjstackユーティリティの代わりに最新のユーティリティjcmdを使用することをお勧めします。
ただし、これをアプリケーションと一緒に出荷することは、ライセンスに影響を与える可能性があり、私にはわかりません。
jcmd
と、Windowsのサービス・プロセスへの接続に失敗com.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
しばらくjstack -F
:成功stackoverflow.com/questions/1197912/...
kill -3を使用すると、標準出力にスレッドダンプが表示されます。ほとんどのアプリケーションサーバーは、標準出力を別のファイルに書き込みます。kill -3を使用すると、そこにあるはずです。スレッドダンプを取得する方法はいくつかあります。
kill -3 <PID>
:標準出力に出力します。ホットスポットVMの場合は、jstack
コマンドを使用してスレッドダンプを生成することもできます。これはJDKの一部です。構文は次のとおりです。
Usage:
jstack [-l] <pid> (to connect to running process)
jstack -F [-m] [-l] <pid>(to connect to a hung process)
- For JRockit JVM we can use JRCMD command which comes with JDK Syntax:
jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]
kill -3 <PID>
JVMを強制終了しないでください。どのタイプのJavaアプリを見ていますか?
StandAlone Javaプロセスのスレッドダンプが必要な場合の手順
ステップ1: Javaプログラムを呼び出すシェルスクリプトのプロセスIDを取得する
linux$ ps -aef | grep "runABCD"
user1 **8535** 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17796 17372 0 08:15:41 pts/49 0:00 grep runABCD
ステップ2: runABCDによって呼び出された子のプロセスIDを取得します。上記のPIDを使用して子を取得します。
linux$ ps -aef | grep **8535**
user1 **8536** 8535 0 Mar 25 ? 126:38 /apps/java/jdk/sun4/SunOS5/1.6.0_16/bin/java -cp /home/user1/XYZServer
user1 8535 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17977 17372 0 08:15:49 pts/49 0:00 grep 8535
ステップ3:特定のプロセスのJSTACKを取得します。XYSServerプロセスのプロセスIDを取得します。つまり8536
linux$ jstack **8536** > threadDump.log