IntelliJ IDEA 2026.1 Help

スレッドダンプ

スレッドダンプは、特定の瞬間におけるアプリケーションの状態を調べるためのツールです。 アプリケーション内のスレッドのリストとスタックトレースが提供されるため、デッドロックや UI の応答なしなどの問題のデバッグに役立ちます。 スレッドダンプの主な利点は、プレーンテキスト形式であることと、それをキャプチャーして処理できるツールが多数あることです。

IntelliJ IDEA を使用すると、実行中のプロセスのスレッドダンプをキャプチャーできるほか、IntelliJ IDEA または jstack jcmd などの別のツールで取得された外部スレッドダンプを解釈することもできます。

IntelliJ IDEA は、バージョン 25 までの JDK ツールによって生成された形式をサポートします。

IntelliJ IDEA からスレッドダンプをキャプチャーする

  1. IntelliJ IDEA からプログラムを実行しているときに、 実行 ツールウィンドウのツールバーで、 スレッドのダンプ をクリックします。

    実行ツールウィンドウのツールバーのスレッドのダンプボタン
  2. IntelliJ IDEA からプログラムをデバッグしているときに、 デバッグ ツールウィンドウのツールバーで、 詳細その他 をクリックし、 スレッドダンプを取得 を選択します。

    デバッグツールウィンドウのツールバーの詳細ボタン
  3. ローカルで実行されている Java/Kotlin プロセスの場合: プロファイラー ツールウィンドウの ホーム タブで、スレッドダンプを作成するプロセスをクリックします。 スレッドダンプを取得 を選択します。

    プロファイラーツールウィンドウでプロセスを右クリックするとメニューが開く

外部スレッドダンプを開く

  1. メインメニューで コード | スタックトレースまたはスレッドダンプの解析 へ移動します。

  2. 開いた スタックトレースの分析 ダイアログで、スレッドダンプを スタックトレースをここに記述する: テキスト領域に貼り付けます。

スレッドダンプは新しいツールウィンドウタブで開きます。 このビューはカスタマイズ可能で、フィルターや並べ替えを適用したり、類似スレッドをマージしたり、スタックトレースを部分的に折りたたんだりできます。

スレッド名の近くにあるアイコンは、スレッドの状態を示します。

アイコン

説明

実行中 / アクティブ – スレッドがアクティブにコードを実行しているデフォルトの状態

(Kotlin コルーチンの場合)実行中 – コルーチンがコードをアクティブに実行している

スリープ – スレッドが Thread.sleep にあるとき、またはパーキングまたは条件待ちのときに発生します。

キャリアスレッド – 現在仮想スレッド、または 作成 / 不明状態のコルーチンを実行しているプラットフォームスレッド

待機中 – スレッドがオブジェクトモニターで待機しているとき、またはコルーチンが中断されているときに発生します

ソケット – スレッドがネットワーク I/O を実行しているときに発生します

I/O – スレッドが非ネットワーク I/O 操作を実行しているときに発生します

,

EDT(イベントディスパッチスレッド) – Swing アプリケーションの UI スレッド。 はアイドル状態の EDT 用、 はアクティブな EDT 用です。

さらに、波状のオーバーレイは仮想スレッドと Kotlin コルーチンを示し、デーモンスレッドは「ゴースト」オーバーレイで示されます。

仮想スレッドとデーモンスレッドを示すスレッドダンプ内のオーバーレイ

実行 ツールウィンドウ内の一部の呼び出しには点線の下線が表示されます。 これらの呼び出しは try ブロック内で発生し、チェック例外をスローする可能性があります。

スタックトレースに表示されるクラスをインスペクションする場合は、スレッドダンプから直接そのクラスに移動できます。

ソースに移動

  • スタックトレースのハイパーリンクをクリックします。

    スレッドダンプ内のハイパーリンク

スレッドダンプを後でインスペクション用に保存したり、他の人に送信したりする場合は、テキストファイルとしてエクスポートできます。

スレッドダンプをテキストファイルとしてエクスポートする

  1. ツールバーで、 テキストファイルにエクスポート をクリックします。

    スレッドダンプビューアーの「テキストファイルにエクスポート」ボタン
  2. パスを指定して、 保存 をクリックします。

IntelliJ IDEA のスレッドダンプ形式

IntelliJ IDEA のスレッドダンプをテキスト形式で表示すると、スレッドの説明とスタックトレースに追加情報が表示される場合があります。

次にその例を示します。

"main" prio=5 tid=0x000001f3c9d13000 nid=NA runnable java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) - locked <0x00000007ab1d3fa8> (a java.io.InputStreamReader) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)

ダンプ内の各スレッドは次の情報で表されます。

スレッドヘッダー行

"Thread-Name" [state flags] prio=N tid=0xHEXVALUE nid=NA [thread state]

スレッドヘッダー行は、すべてのスレッドの説明の先頭に配置され、次の内容で構成されます。

  • スレッド名は引用符で囲む

  • スレッドがデーモンか仮想かを示すオプションのフラグ

  • スレッド優先度(prio) – JVM によって管理される値で、スレッドのスケジューリング優先度を 1(最低)から 10(最高)の範囲で示します。 デフォルト値は 5 です。 これらの優先度は OS レベルのスレッド優先度にマッピングできますが、マッピングは実装に依存し、優先度は実行順序を保証するものではなく、スケジューラへのヒントとして機能します。

  • 16 進数のスレッド ID (tid)

  • ネイティブ ID(nid) – IDE 生成のダンプでは通常 NA です。 この情報は通常、スレッドダンプが JVM 自体によって生成された場合にのみ利用できます。

  • スレッドの状態。 以下の状態が認識されます。

    スレッドの状態

    説明

    runnable

    スレッドはアクティブに実行中または実行準備ができています

    sleeping

    スレッドはスリープ状態です (Thread.sleep())

    waiting on condition

    スレッドは条件を待機しています

    waiting for monitor entry

    スレッドはモニターロックの取得を待機しています

    sleeping

    スレッドはスリープ状態です (Thread.sleep())

    parking

    スレッドは停止しています (LockSupport.park())

    on object monitor

    スレッドはオブジェクトモニターを待機しています

    idle

    イベントディスパッチスレッドはアイドル状態です

スレッド状態行

スレッド状態行はスレッドヘッダー行の直後に表示され、JVM によって示されるスレッドの状態を示します。 以下の状態が考えられます。

スレッドの状態

説明

NEW

まだ実行を開始していないスレッド

RUNNABLE

Java 仮想マシンで実行されるスレッド

BLOCKED

スレッドがモニターロックを待機してブロックされました

WAITING

別のスレッドが特定のアクションを実行するのを無期限に待機するスレッド

TIMED_WAITING

指定された待機時間まで別のスレッドがアクションを実行するのを待つスレッド

TERMINATED

実行を終了したスレッド

スレッド状態の詳細については、 公式 Java ドキュメントを参照してください。

スタックトレース

スタックトレースには、スレッドのメソッド呼び出しのシーケンスが表示され、次のような特徴があります。

  • スタックトレースの各行はタブ文字で始まります。

  • メソッド呼び出しは、上 (最近呼び出されたメソッド) から下 (以前のメソッド) の順にリストされます。

  • 各行は at package.class.method(SourceFile:LineNumber) という形式に従います。 IntelliJ IDEA がソースファイルを認識すると、それを使って ソースコードに移動できます。

ロック情報

利用可能な場合、IntelliJ IDEA のスレッドダンプには、スレッドが保持しているロックに関する情報が含まれます:

  • このスレッドが所有するモニター

  • このスレッドによってブロックされたスレッド

  • このスレッドが待機しているモニター

  • クラスとメモリアドレスでオブジェクトをロックする

Kotlin コルーチン

Kotlin のコルーチンは、IntelliJ IDEA のスレッドダンプで Java スレッドと並べて表示できます。 例:

"coroutine:2" SUSPENDED at kotlinx.coroutines.DelayKt.awaitCancellation(Delay.kt:157) at NetworkServiceKt.fetchData(NetworkService.kt:15) at MainKt$main$1.invokeSuspend(Main.kt:11) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)

コルーチン情報は次のようにフォーマットされます。

"CoroutineName:id" (state) [dispatcher] <coroutine descriptor> <stack trace>
  • 名前と ID: コルーチン名の後に一意の ID が続く(例: coroutine:1

  • 状態: コルーチンの現在の状態(例: SUSPENDED

  • ディスパッチャー: コルーチンが使用しているディスパッチャーに関する情報(例: Dispatchers.IO

  • スタックトレース: コルーチンのスタックフレーム

コルーチンは次のいずれかの状態になります。

コルーチン状態

説明

RUNNING

コルーチンは現在実行

SUSPENDED

コルーチンは中断ポイントで中断されます

CREATED

コルーチンは作成されましたが、まだ開始されていません

UNKNOWN

状態は判断できません

2026 年 3 月 30 日