troushoo

jcmd を使ってデッドロックのトラブルシューティング

Java 7 より追加された jcmd を使って、デッドロックの原因を調査する方法を紹介します。

手順
1. jcmd を実行し、デッドロックが疑われるアプリのプロセス ID を表示させます。


2. jcmd <プロセス ID> Thread.print でコールスタックが表示されます。


3. ハングを検知すると、デッドロックの情報とスレッドのコールスタックが表示されます。


今回用いたソースコード
以下のソースコードでデッドロックを作りました。

public class MyDeadLock {
   String str1 = "str1";
   String str2 = "str2";

   Thread th1 = new Thread("Thread1") {
      public void run() {
         synchronized(str1) {
            System.out.println("Thread1 is holding str1.");
            try {
               sleep(3000);
            } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
            }
            System.out.println("Thread1 is waiting for str2.");
            synchronized(str2) {
               System.out.println("Thread1 is holding str2");
            }
         }
       }
    };

   Thread th2 = new Thread("Thread2") {
      public void run() {
         synchronized(str2) {
            System.out.println("\tThread2 is holding str2");
            try {
               sleep(1000);
            } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
            }
            System.out.println("\tThread2 is waiting for str1.");
            synchronized(str1) {
               System.out.println("\tThread2 is holding str1");
            }
         }
      }
    };

   public static void main(String[] args) {
      MyDeadLock dl = new MyDeadLock();
     
      dl.th1.start();
      dl.th2.start();
     
      System.out.println("finished");
   }
}



関連記事
Java 9 以降のコアダンプで、ハングの原因を特定
  1. 2018/08/19(日) 22:54:55|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
<<Jupyter Notebook でのパフォーマンス調査 | ホーム | 残留オブジェクトを削除可能な Microsoft 公開の GUI ツール Lingering Object Liquidator>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://troushoo.blog.fc2.com/tb.php/367-c89e5889
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (80)
ネットワーク (37)
Wireshark (44)
Visual Studio (55)
WinDbg (34)
SOS・Psscor2/Psscor4 (25)
Linux (19)
コンテナ (4)
Azure (17)
Tips (19)
AD (8)
.NET (24)
Python (6)
Java (5)
SQL (1)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する