印刷ビューの終了

HotSpot VM のトラブルシューティングガイド

印刷ビュー

ドキュメント情報

はじめに

1. 診断ツールおよびオプション

1.1 はじめに

1.1.1 -XX を含むコマンド行オプション

1.1.2 制限

1.1.3 新規ツールの開発

1.2 ツール、オプション、およびコマンドのサマリー

1.2.1 ポストモーテム診断用のツールおよびオプション

1.2.2 ハングアッププロセス用のツールおよびオプション

1.2.3 モニタリング用のツールおよびオプション

1.2.4 その他のツール、オプション、変数、およびプロパティー

2. ツールの詳細な説明

3. メモリーリークのトラブルシューティング

4. システムクラッシュのトラブルシューティング

5. ハングアップまたはループしているプロセスのトラブルシューティング

6. シグナル処理と例外処理の統合

7. バグレポートの提出

A. 環境変数とシステムプロパティー

B. コマンド行オプション

C. 致命的エラーログ

D. このリリースのツールのサマリー

第 1 章

診断ツールおよびオプション

この章では、Java Platform, Standard Edition Development Kit 7 (JDK 7) で使用可能な各種診断/モニタリングツールを紹介します。これらのツールは、第 2 章「ツールの詳細な説明」で詳しく説明されています。

このリリースの JDK で使用可能なツールの一覧や前のリリースからの変更点については、付録 D「このリリースのツールのサマリー」を参照してください。


注 - この章で説明するコマンド行ユーティリティーのいくつかは、試験的なものです。jstackjinfo、および jmap ユーティリティーが、試験的なユーティリティーの例です。これらのユーティリティーは、将来の JDK リリースで変更される可能性があるほか、将来のリリースに含まれなくなる可能性もあります。


1.1 はじめに

この章で説明するコマンド行ユーティリティーのほとんどは、JDK リリースに含まれているか、またはオペレーティングシステムのツールやユーティリティーです。JDK コマンド行ユーティリティーは JDK ダウンロードに含まれていますが、Java 実行環境 (JRE) で配備されたアプリケーションの問題の診断やモニターにこれらを使用できることに注目することが重要です。

一般に、この章で説明する診断ツール/オプションは、さまざまなメカニズムを使って報告対象の情報を取得します。メカニズムは多くの場合、仮想マシン実装、オペレーティングシステム、およびそれぞれのバージョンに固有です。したがって、一部のツールから報告される情報にはある程度の重複があります。これは、これらのツールが対象とするさまざまな問題や課題の文脈で見られるはずです。多くの場合、ツールの一部のみが、特定の時点で特定の問題に適用可能です。

1.1.1 -XX を含むコマンド行オプション

-XX」という接頭辞が付いたコマンド行オプションは、Java HotSpot 仮想マシンに固有のものです。これらのオプションの多くは、パフォーマンスチューニングや診断を行うために重要であるため、このガイドで説明されています。「B.1 HotSpot VM のコマンド行オプション」を参照してください。

ただし、これらの -XX オプションは Java API の一部ではなく、リリースごとに変わる可能性があることに注目することが重要です。

1.1.2 制限

場合によっては、ここで説明するツールは一部のオペレーティングシステムでのみ使用できます。さらに、Solaris 10 OS では本番環境で使用可能な高度な診断機能/ツールが多数導入されましたが、ネイティブツールの多くは Java 実行環境に固有の情報を提供できます。

コマンド行ユーティリティーやオプションからのログファイルやその他の出力の形式は、バージョンに固有です。たとえば、致命的エラーログの形式に依存するスクリプトを開発した場合、ログファイルの形式が将来変更されれば、このスクリプトが予想どおりに動作しなくなる可能性があります。

1.1.3 新規ツールの開発

このドキュメントで説明するツールに加え、JDK リリースに付属する API を使って新しいツールを開発できます。「2.17 診断ツールの開発」を参照してください。

1.2 ツール、オプション、およびコマンドのサマリー

ツールやオプションは次のカテゴリに分類され、複数のカテゴリに該当するツールもあります。これらのツールやオプションについては、次の各セクションで詳しく説明します。

1.2.1 ポストモーテム診断用のツールおよびオプション

このセクションでは、ポストモーテム診断用に設計されたオプションやツールのサマリーを提供します。アプリケーションがクラッシュした場合、これらのオプションやツールを使って、クラッシュ発生時、またはあとでクラッシュダンプからの情報を使って追加情報を取得できます。

ツールまたはオプション
説明および使用方法
致命的エラーログ
致命的エラーが発生すると、エラーログが作成されます。このファイルには、致命的エラーの発生時に取得された情報が多数含まれています。これは多くの場合、クラッシュ発生時に最初に調べるべき項目です。付録 C「致命的エラーログ」を参照してください。
-XX:+HeapDumpOnOutOfMemoryError オプション
このコマンド行オプションは、VM でネイティブのメモリー不足エラーが検出された際にヒープダンプを生成することを指定します。「B.1.2 -XX:+HeapDumpOnOutOfMemoryError オプション」を参照してください。
-XX:OnError オプション
このコマンド行オプションは、致命的エラーの発生時にユーザー指定の一連のスクリプトまたはコマンドを実行することを指定します。たとえば Windows の場合、このオプションでクラッシュダンプを強制するコマンドを実行できます。ポストモーテムデバッガが構成されていないシステムでは、このオプションが非常に役立ちます。「B.1.3 -XX:OnError= オプション」を参照してください。
-XX:+ShowMessageBoxOnError
このコマンド行オプションは、致命的エラーの発生時にプロセスを中断します。このオプションはユーザーの応答に応じて、ネイティブデバッガ (dbxgdbmsdev) を起動して VM に接続できます。「B.1.4 -XX:+ShowMessageBoxOnError オプション」を参照してください。
その他の -XX オプション
トラブルシューティングに役立つ -XX コマンド行オプションは、ほかにもいくつかあります。「B.1.5 その他の -XX オプション」を参照してください。
Java VisualVM

(ポストモーテムは Solaris OS と Linux でのみ使用)

このユーティリティーは、コアダンプの可読表示をヒープダンプやスレッドダンプの形式で、および概要情報 (JVM 引数、システムプロパティーなど) として提供することで、コアダンプを分析できます。
jdb ユーティリティー
デバッガサポートには、jdb などの Java 言語デバッガがコアファイルに接続することを許可する、AttachingConnector が含まれています。これは、各スレッドがクラッシュ時に何をしていたのかを理解しようとする際に役立つ可能性があります。「2.4 jdb ユーティリティー」を参照してください。
jhat ユーティリティー
このユーティリティーは、ヒープダンプ内のオブジェクトトポロジを参照するための便利な手段を提供します。「2.5 jhat ユーティリティー」を参照してください。
jinfo ユーティリティー

(ポストモーテムは Solaris OS と Linux でのみ使用)

このユーティリティーは、クラッシュから取得されたコアファイル、または gcore ユーティリティーを使って取得されたコアファイルから、構成情報を取得できます。「2.6 jinfo ユーティリティー」を参照してください。
jmap ユーティリティー

(ポストモーテムは Solaris OS と Linux でのみ使用)

このユーティリティーは、クラッシュから取得されたコアファイルから、または gcore ユーティリティーを使って取得されたコアから、ヒープヒストグラムなどのメモリーマップ情報を取得できます。「2.7 jmap ユーティリティー」を参照してください。
jsadebugd デーモン

(Solaris OS および Linux のみ)

Serviceability Agent Debug Daemon (jsadebugd) は、Java プロセスまたはコアファイルに接続し、デバッグサーバーとして動作します。「2.10 jsadebugd デーモン」を参照してください。
jstack ユーティリティー
このユーティリティーは、Java プロセスから Java およびネイティブスタックの情報を取得できます。Solaris OS および Linux の場合、このユーティリティーはコアファイルやリモートデバッグサーバーからも情報を取得できます。「2.11 jstack ユーティリティー」を参照してください。
ネイティブツール
各オペレーティングシステムには、ポストモーテム診断に使用可能なネイティブツールおよびユーティリティーがあります。「2.16 オペレーティングシステム固有のツール」を参照してください。

1.2.2 ハングアッププロセス用のツールおよびオプション

この一覧に含まれるオプションやツールは、ハングアップまたはデッドロックしたプロセスが関係するシナリオで役立つ可能性があります。これらのツールでは、アプリケーション起動時に特殊なオプションは必要ありません。

ツールまたはオプション
説明および使用方法
Ctrl-Break ハンドラ

(Solaris OS および Linux では Ctrl-\ または kill -QUIT pid、Windows では Ctrl-Break)

このキーの組み合わせでは、スレッドダンプとデッドロック検出が実行されます。Ctrl-Break ハンドラではオプションで、並行ロックとその所有者の一覧や、ヒープヒストグラムを出力することもできます。「2.15 Ctrl-Break ハンドラ」を参照してください。
jdb ユーティリティー
デバッガサポートには、jdb などの Java 言語デバッガがプロセスに接続することを許可する、接続コネクタが含まれています。これは、ハングアップやデッドロックの発生時に各スレッドが何をしていたのかを示すのに役立つ可能性があります。「2.4 jdb ユーティリティー」を参照してください。
jhat ユーティリティー
このユーティリティーは、ヒープダンプ内のオブジェクトトポロジを参照するための便利な手段を提供します。「2.5 jhat ユーティリティー」を参照してください。
jinfo ユーティリティー
このユーティリティーは Java プロセスから構成情報を取得できます。「2.6 jinfo ユーティリティー」を参照してください。
jmap ユーティリティー
このユーティリティーは、Java プロセスからヒープヒストグラムなどのメモリーマップ情報を取得できます。Solaris OS および Linux では、プロセスがハングアップしている場合に -F オプションを使用できます。「2.7 jmap ユーティリティー」を参照してください
jsadebugd デーモン

(Solaris OS および Linux のみ)

Serviceability Agent Debug Daemon (jsadebugd) は、Java プロセスまたはコアファイルに接続し、デバッグサーバーとして動作します。「2.10 jsadebugd デーモン」を参照してください。
jstack ユーティリティー
このユーティリティーは、Java プロセスから Java およびネイティブスタックの情報を取得できます。Solaris OS および Linux では、プロセスがハングアップしている場合に -F オプションを使用できます。「2.11 jstack ユーティリティー」を参照してください。
ネイティブツール
各オペレーティングシステムには、ハングアップやデッドロックの状況で役立つ可能性のあるネイティブツールおよびユーティリティーがあります。「2.16 オペレーティングシステム固有のツール」を参照してください。

1.2.3 モニタリング用のツールおよびオプション

これらのツールは、その時点で実行されているアプリケーションのモニタリング用に設計されています。

ツールまたはオプション
説明および使用方法
Java VisualVM
このユーティリティーは、Java アプリケーションが Java 仮想マシン上で実行されているときに、それらに関する詳細情報を表示するためのビジュアルインタフェースを提供します。この情報は、ローカルおよびリモートアプリケーションのトラブルシューティング、およびローカルアプリケーションのプロファイリングに使用できます。「2.2 Java VisualVM」を参照してください。
JConsole ユーティリティー
このユーティリティーは、Java Management Extensions (JMX) に基づくモニタリングツールです。このツールは、Java 仮想マシンの組み込み JMX インストゥルメンテーションを使って、実行中のアプリケーションのパフォーマンスやリソース消費に関する情報を提供します。「2.3 JConsole ユーティリティー」を参照してください。
jmap ユーティリティー
このユーティリティーは、Java プロセス、コアファイル、またはリモートデバッグサーバーから、ヒープヒストグラムなどのメモリーマップ情報を取得できます。「2.7 jmap ユーティリティー」を参照してください。
jps ユーティリティー
このユーティリティーは、ターゲットシステム上の計測された HotSpot 仮想マシンを一覧表示します。VM が埋め込まれた環境、つまり java 起動ツールではなく JNI 呼び出し API を使って VM が起動される環境では、このユーティリティーが非常に役立ちます。「2.8 jps ユーティリティー」を参照してください。
jstack ユーティリティー
このユーティリティーは、Java プロセスから Java およびネイティブスタックの情報を取得できます。Solaris OS および Linux の場合、このユーティリティーはコアファイルやリモートデバッグサーバーからも情報を取得できます。「2.11 jstack ユーティリティー」を参照してください。
jstat ユーティリティー
このユーティリティーは、HotSpot VM の組み込みインストゥルメンテーション を使って、実行中アプリケーションのパフォーマンスやリソース消費に関する情報を提供します。このツールは、パフォーマンスの問題、特にヒープサイズ決定やガベージコレクションに関係する問題を診断するときに使用できます。「2.12 jstat ユーティリティー」を参照してください。
jstatd デーモン
このユーティリティーは、計測された Java 仮想マシンの作成と終了を監視し、ローカルホスト上で実行されている VM にリモート監視ツールが接続することを許可するインタフェースを提供する、RMI サーバーアプリケーションです。「2.13 jstatd デーモン」を参照してください。
visualgc ユーティリティー
このユーティリティーは、ガベージコレクションシステムのグラフィカル表示を提供します。これは jstat と同様に、HotSpot VM の組み込みインストゥルメンテーションを使用します。「2.14 visualgc ツール」を参照してください。
ネイティブツール
各オペレーティングシステムには、モニタリング目的に役立つ可能性のあるネイティブツールおよびユーティリティーがあります。たとえば、Solaris 10 OS で導入された動的トレース (DTrace) 機能は、高度なモニタリングを実行します。「2.16 オペレーティングシステム固有のツール」を参照してください。

1.2.4 その他のツール、オプション、変数、およびプロパティー

特定の種類の問題向けに設計されたツールに加え、これらのツール、オプション、変数、およびプロパティーはその他の問題の診断に役立つ可能性があります。

ツールまたはオプション
説明および使用方法
HPROF プロファイラ
この単純なプロファイラは、CPU 使用率、ヒープ割り当て統計、競合プロファイル、ヒープダンプ、および Java 仮想マシン内のすべてのモニターとスレッドの状態を提供できます。HPROF はパフォーマンス、ロック競合、メモリーリークなどの問題を分析する際に役立ちます。「2.1 HPROF - ヒーププロファイラ」を参照してください。
jhat ユーティリティー
このユーティリティーは、不要なオブジェクト保持 (またはメモリーリーク) の診断に役立ちます。これを使って、オブジェクトダンプを参照し、ヒープ内の到達可能なすべてのオブジェクトを表示し、どの参照がオブジェクトをライブに保っているかを示すことができます。「2.5 jhat ユーティリティー」を参照してください。
jinfo ユーティリティー
このユーティリティーは、指定された Java プロセスの特定の Java VM フラグの値を動的に設定、設定解除、および変更できます。Solaris OS および Linux の場合、これは構成情報を出力することもできます。「2.6 jinfo ユーティリティー」を参照してください。
jrunscript ユーティリティー
このユーティリティーはコマンド行スクリプトシェルで、インタラクティブおよびバッチモードの両方のスクリプト実行をサポートしています。「2.9 jrunscript ユーティリティー」を参照してください。
Sun Studio dbx デバッガ
これはインタラクティブなコマンド行デバッグツールで、プログラムを停止してその状態を調べるなど、プログラムの動的実行を完全に制御できます。詳細については、Sun Studio プログラムデバッグサイトにある dbx の最新ドキュメントを参照してください。
Sun Studio Performance Analyzer
このツールを使って、コードのパフォーマンスを評価し、潜在的なパフォーマンス問題を特定し、コード内で問題が発生する部分を突きとめることが容易になる可能性があります。Performance Analyzer はコマンド行、またはグラフィカルユーザーインタフェースから使用できます。詳細については、Sun Studio Performance Analyzer のサイトを参照してください。
Sun のデータ領域プロファイリング:DProfile
このツールは、Sun コンピューティングシステム内でのデータフローを洞察することで、ソフトウェアとハードウェアの両方のボトルネックを特定するのを支援します。DProfile は、Sun Studio 11 コンパイラスイートで Performance Analyzer GUI 経由でサポートされています。情報を得るには、Cool Tools Community サイトの「Other Sun Tools」の下を参照してください。
-Xcheck:jni オプション
このオプションは、Java Native Interface (JNI) を使用する、またはサードパーティーのライブラリ (一部の JDBC ドライバなど) を採用するアプリケーションの問題を診断する際に役立ちます。「B.2.1 -Xcheck:jni オプション」を参照してください。
-verbose:class オプション
このオプションは、クラスのロードとアンロードのロギングを有効にします。「B.2.2 -verbose:class オプション」を参照してください。
-verbose:gc オプション
このオプションは、ガベージコレクション情報のロギングを有効にします。「B.2.3 -verbose:gc オプション」を参照してください。
-verbose:jni オプション
このオプションは、JNI のロギングを有効にします。「B.2.4 -verbose:jni オプション」を参照してください。
JAVA_TOOL_OPTIONS 環境変数
この環境変数では、ツールの初期化 (具体的には -agentlib または -javaagent オプションを使用したネイティブまたは Java プログラミング言語エージェントの起動) を指定できます。「A.2 JAVA_TOOL_OPTIONS 環境変数」を参照してください。
java.security.debug システムプロパティー
このシステムプロパティーは、Java の JRE のセキュリティーチェックが実行中にトレースメッセージを出力するかどうかを制御します。「A.3 java.security.debug システムプロパティー」を参照してください。