スレッドダンプは、CPUのピーク、デッドロック、メモリの例外、アプリケーションの応答の遅い、長い応答時間、その他のシステムの問題を判断するのに役立ちます。 http://fastthread.io/などの一部のオンライン分析ツールは、問題を分析して見つけるのにも役立ちますが、これらのツールにはダンプファイルが必要です。したがって、この記事では、7でJavaスレッドダンプファイルをつかむ方法を要約しました。
1。JSTACK
JStackは、スレッドダンプファイルをクロールするための効果的なコマンドラインツールです。 JDKディレクトリのビンフォルダー(jdk_home/bin)にあります。次のことは、ファイルをダンプするコマンドです。
jstack -l <pid>> <file -path>
説明:
PID:JavaアプリケーションのプロセスID、つまり、ダンプファイルをクロールする必要があるアプリケーションプロセスID。
ファイルパス:ダンプファイルを保存するパス。
例:
jstack -l 37320> /opt/tmp/threaddump.txt
上記の例は、JSTACKを使用して/opt/tmp/threaddump.txtディレクトリにダンプファイルを生成することを示しています。
Java5から始めて、JSTackはJDKに含まれています。 JDKの古いバージョンを使用する場合は、他の方法の使用を検討する必要があります。
2。キル-3
セキュリティ上の考慮事項に関しては、生産環境の一部のマシンにはJRE環境のみが含まれているため、JSTackツールを使用できません。この場合、キル-3を使用できます。
kill -3 <pid>
説明:
PID:JavaアプリケーションのプロセスID、つまり、ダンプファイルをクロールする必要があるアプリケーションプロセスID。
例:
kill -3 37320
キル-3を使用してダンプファイルを生成する場合、ダンプファイルは標準のエラーストリームに出力されます。アプリケーションがTomcatで実行されている場合、ダンプコンテンツは<tomcat_home> /logs/catalina.outファイルに送信されます。
3。JVisualVm
Java VisualVMは、JVM情報を提供できるグラフィカルインターフェイスツールです。 jdk_home/bin/jvisualvm.exeファイルにあります。 JDK6 Update7から始めて、JDKに含まれています。
jvisualvmを実行し、左パネル(下の図に示すように)で、実行中のJVM情報がリストされています。このツールは、ローカルまたはリモートの実行中のJVMからダンプファイルをつかむことができます。
下の図に示すように、上の図のプロセス名に対応するスレッドダンプボタンをクリックして、ダンプファイルを生成します。
4。JMC
Java Mission Control(JMC)は、ローカルまたは生産環境からデータを収集および分析できるツールです。 Oracle JDK 7 Update 40から始めて、JVMからダンプファイルを生成できるJDKに含まれています。 JMCはJDK_HOME/BIN/JMC.EXEファイルにあります:
ツールを実行した後、Localで実行されるJavaプロセスを確認できます。これは、リモートマシンに接続することもできます。ダンプファイルを生成するJavaプロセスをダブルクリックし、[フライトレコーダー]をクリックすると、次のダイアログボックスが表示されます。
スレッドダンプドロップダウンボックスで、ダンプファイルを生成するための時間間隔を選択できます。上記の例では、ダンプファイルが60秒ごとに生成されます。完了した後、フライトレコーダーを起動すると、スレッドパネルにダンプファイルの内容が表示されます。
5。Windows(Ctrl + Break)
この方法は、Windowsオペレーティングシステムでのみ有効です。
コンソールウィンドウのコマンドラインを選択します
コマンドラインウィンドウで「ctrl + break」コマンドを押します
次に、ダンプファイルが生成され、ダンプファイルの内容がコマンドラインウィンドウに印刷されます。
注1:「Break」キーをキャンセルしたいくつかのノートブック(Lenovo Tシリーズなど)があります。この場合、「機能キー + B」キーがブレークキーと同じであることがわかりました。
注2:上記の方法を使用することの欠点の1つは、ダンプファイルのコンテンツがコンソールに印刷されることです。ダンプファイルがない場合、http://fasthread.ioなどの分析ツールを使用してダンプファイルを分析することは困難です。したがって、次のコマンドを使用して、ダンプファイルのコンテンツをテキストファイルに出力できます。たとえば、アプリケーション名はsamplethreadprogramであるため、通常のコマンドは次のとおりです。
java -classpath . SampleThreadProgram
ダンプファイルの内容をテキストファイルに出力するコマンドは次のとおりです。
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
「ctrl + break」キーを押すと、ダンプファイルはc:/workspace/threaddump.txtに保存されます。
6。ThreadMXBean
JDK 1.5から始めて、threadmxbeanが導入されました。これは、JVMの管理インターフェイスです。このインターフェイスを使用して、ダンプファイルを生成するために少量のコードのみが必要です。以下は、Dumpファイルを生成するためにthreadmxbeanを使用する主な実装です。
public void dumpthreaddump(){threadmxbean threadmxbean = managementfactory.getthreadmxbean(); for(threadinfo ti:threadmxbean.dumpallthreads(true、true)){system.out.print(ti.tostring()); }}7。APMツールアプリのダイナミクス
一部のアプリケーションパフォーマンス監視ツールは、ダンプファイルを生成する機能を提供します。アプリのダイナミクスを使用してアプリケーションを監視する場合、次のものはダンプファイルを生成する手順です。
[アクション]ウィンドウの作成ウィンドウを開き、[診断]を選択します - > [作成]ウィンドウでスレッドダンプを取ります。
クロールするダンプファイルのために、アクション名、ダンプファイルの数、および時間間隔(ミリ秒)を入力します。
クローリングダンプアクションが開始される前にいくつかのアクションを実行する場合は、このアクションをチェックする前に必要な承認実行を選択し、個人またはグループのメールアドレスを入力することができます。
[OK]をクリックします。
要約します
ダンプファイルを早めにつかむには7つの方法をリストしましたが、imho、jstack、kill -3は、次の理由で最良の選択です。
a。シンプルで実装しやすい。
b。一般:ほとんどの場合、オペレーティングシステムの種類に関係なく、Javaベンダー、JVMバージョンなど。