Java SE 7 向けクイックトラブルシューティングヒント (Windows)
この「クイックスタートガイド」では、トラブルシューティングのための簡単なヒントをいくつか提供します。各サブセクションでは、トラブルシューティングに役立つ可能性のある典型的な機能をいくつか列挙します (情報取得やアクション実行のための 1 つ以上の方法を含む)。
これらのヒントは次のような構成になっています。
ハングアップ、デッドロック、またはループ中のプロセス
ポストモーテム診断、メモリーリーク
モニタリング
その他の機能
ハングアップ、デッドロック、またはループ中のプロセス
- すべての Java スレッドのスレッドスタックを出力します。
- デッドロックを検出します。
- デッドロック検出を要求します:JConsole ツール、「スレッド」タブ
- デッドロックしたスレッドに関する情報を出力します:Control-Break
- プロセスのロック情報を出力します:jstack -l pid
- プロセスのヒープヒストグラムを取得します。
- Java プロセスの起動時に -XX:+PrintClassHistogram を指定してから Control-Break
- jmap -histo pid
- プロセスの Java ヒープをバイナリ形式でファイルにダンプします。
- jmap -dump:format=b,file=filename pid
- プロセスの共有オブジェクトマッピングを出力します。
- プロセスのヒープサマリーを出力します。
- Control-Break
- jmap -heap pid
- プロセスのファイナライズ情報を出力します。
- プロセスにコマンド行デバッガを接続します。
- jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=pid
ポストモーテム診断、メモリーリーク
- 致命的エラーログファイルを調べます。デフォルトのファイル名は、作業ディレクトリ内の hs_err_pidpid.log です。
- ヒープダンプを作成します。
- アプリケーション起動時に HPROF を有効にします:java -agentlib:hprof=file=file,format=b application を実行したあとに Control-Break
- アプリケーション起動時に HPROF を有効にします:java -agentlib:hprof=heap=dump application
- JConsole ツール、「MBean」タブ
- VM の起動時に -XX:+HeapDumpOnOutOfMemoryError を指定します。OutOfMemoryError がスローされると、VM によってヒープダンプが生成されます。
- Java ヒープダンプを参照します。
- プロセスのヒープヒストグラムを取得します。
- Java プロセスの起動時に -XX:+PrintClassHistogram を指定してから Control-Break
- jmap -histo pid
モニタリング
(jstat は、Windows 98 および Windows ME では使用できません。)
注:jstat コマンドの vmID 引数は、仮想マシンの識別子です。詳しい説明については、jstat のマニュアルページを参照してください。
- クラスローダーに関する統計を出力します。
- コンパイラに関する統計を出力します。
- コンパイラの動作:jstat -compiler vmID
- コンパイル方法の統計:jstat -printcompilation vmID
- ガベージコレクションに関する統計を出力します。
- 統計のサマリー:jstat -gcutil vmID
- 統計のサマリー (原因付き):jstat -gccause vmID
- GC ヒープの動作:jstat -gc vmID
- すべての世代の容量:jstat -gccapacity vmID
- New 世代の動作:jstat -gcnew vmID
- New 世代の容量:jstat -gcnewcapacity vmID
- Old および Permanent 世代の動作:jstat -gcold vmID
- Old 世代の容量:jstat -gcoldcapacity vmID
- Permanent 世代の容量:jstat -gcpermcapacity vmID
- ファイナライズ待ちのオブジェクトをモニターします。
- JConsole ツール、「VMサマリー」タブ
- jmap -finalizerinfo pid
- java.lang.management.MemoryMXBean クラスの getObjectPendingFinalizationCount メソッド
- メモリーをモニターします。
- HPROF 経由のヒープ割り当てプロファイル:java -agentlib:hprof=heap=sites
- JConsole ツール、「メモリー」タブ
- Control-Break は世代情報を出力します。
CPU 使用率をモニターします。
- スレッドスタック別:java -agentlib:hprof=cpu=samples application
- メソッド別:java -agentlib:hprof=cpu=times application
- JConsole ツール、「概要」タブと「VMサマリー」タブ
- スレッドのアクティビティーをモニターします。
- クラスのアクティビティーをモニターします。
リモートデバッグサーバーでのアクション
まずデバッグデーモン jsadebugd を接続してから、次のコマンドを実行します。
- Java ヒープをバイナリ形式でファイルにダンプします:jmap -dump:format=b,file=filename hostID
- 共有オブジェクトマッピングを出力します:jmap hostID
- ヒープサマリーを出力します:jmap -heap hostID
- ファイナライズ情報を出力します:jmap -finalizerinfo hostID
- ロック情報を出力します:jstack -l hostID
- スレッドトレースを出力します:jstack hostID
- Java 構成情報を出力します:jinfo hostID
その他の機能
- 計測 Java 仮想マシンとのインタフェースを提供します。
- 計測 VM の作成と終了のモニター (Windows 98 と Windows ME では不可):jstatd デーモン
- 計測 VM を一覧表示します (Windows 98 と Windows ME では不可):jps
- リモートモニタリングツールとローカル VM 間のインタフェースを提供します (Windows 98 と Windows ME では不可):jstatd デーモン
- ガベージコレクションを要求します:JConsole ツール、「メモリー」タブ
- 実行中のプロセスの Java 構成情報を出力します。
- プロセスの特定の Java VM フラグの値を動的に設定、設定解除、または変更します。
- VM に渡されたコマンド行フラグを出力します。
- Java システムプロパティーを出力します。
- Java VM のフラグを仮想マシンに渡します。
- jconsole -Jflag ...
- jhat -Jflag ...
- jmap -Jflag ...
- Java ヒープの Permanent 世代の統計を出力します (クラスローダー別)。
- モニター競合に関して報告します。
- java -agentlib:hprof=monitor=y application
- スクリプトを対話型モードまたはバッチモードで評価または実行します。
- MBean との動的なインタフェースを提供します (JConsole ツール、「MBean」タブ経由)。
- ツリー構造を表示します。
- 属性の値を設定します。
- 操作を呼び出します。
- 通知に登録します。
- 対話型のコマンド行デバッガを実行します。
- クラス用の新しい VM を起動します:jdb class
- 実行中の VM にデバッガを接続します:jdb -attach address