そもそも、Full Thread Dump というモノを知っている人が少ないと思うのですが、レアな人のために書いておきます。
Full Thread Dump というのは、JavaVMが実行中のスレッドの現在の状態を出力してくれる機能です。
これがあると何が便利なのかというと、無応答状態になったプロセスの無応答の原因箇所や、デッドロックで止まってしまったアプリケーションのデッドロックの原因を解析するのに重要な情報を得られるのです。
Windowsのコマンドプロンプトや、UnixやMacOSのshellから java コマンドで起動した場合は、Ctrl+Break キーを入力すれば簡単に Full Thread Dump を取得できるのですが、Eclipseのコンソールはそれができません。
コマンドプロンプトやshellならば、Javaアプリケーションが標準入力を受け取れるのですが、EclipseなどのIDEからJavaアプリケーションを起動した場合は、別プロセスのJavaアプリケーションに対してjdbで接続するような仕組みになっているので、IDEがそのようなキーアサインをJavaのプロセスに送信できるようになっているかどうかに依存します。
で、Eclipseで試してみましたけど、全然動いてくれません。
なにか方法はないものかとぐぐっていたのですが、ヒットするのはできないというレポートばかり。
これは、ちょっと方向性を変えなければと思って考えていたところ、ふとVisualVMを思い出しました。
≫ VisualVM
さくっとダウンロードして試してみたら、簡単に Full Thread Dump を取得できました。
まず、VisualVMを起動すると、同一のパソコン上で動作しているJavaVMの一覧が表示されます。
ここでは、EclipseとVisualVMとVSCodeがJavaのプロセスとして動いているようです。
調べたいアプリをダブルクリックすると、右側にアプリの情報が表示されます。
Threadsタブを選択します。
すると、右端に「Thread Dump」のボタンがあるではないですか!
このボタンをクリックすると、Full Thread Dump が表示されました!
同一のパソコン上で動作しているJavaVMならば、この手順で簡単にFull Thread Dumpを取得できます。
でも、同一のパソコンではなくてもできそうです。
なぜなら、VisualVMの左の「Applications」には、「Remote」の選択肢もありますのでで。
「Remote」を右クリックすると「Add Remote Host」のダイアログが表示されますので、そこでホスト名かIPアドレスを入力すれば、そのホストで動作しているJavaVMのリストを表示してくれるのではないかと思います。試してないから知らんけど。
Happy Hakking!