Java Platform, Standard Editionトラブルシューティング・ガイド
目次      

Java HotSpot VMコマンド行オプション

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

jinfo -flagコマンドを使用すると、指定されたJavaプロセスの特定のJava VMフラグの値を動的に設定、設定解除または変更できます。 jinfoユーティリティおよびJConsoleユーティリティを参照してください。

これらのフラグの完全なリストについては、JConsoleユーティリティの「MBean」タブを使用してください。 com.sun.managementドメインにあるHotSpotDiagnostic MBeanのDiagnosticOptions属性の値のリストを参照してください。 フラグは次のとおりです。

-XX:HeapDumpOnOutOfMemoryErrorオプション

このオプションは、JavaヒープまたはPermanent世代からの割当てが満たされない場合に、Java HotSpot VMにヒープ・ダンプを生成するよう指示します。 このオプションを使って実行するときのオーバーヘッドはないため、OutOfMemoryError例外が表面化するまでに長い時間のかかる本番システムに役立つ可能性があります。

JConsoleユーティリティの「MBean」タブを使用して、このオプションを実行時に指定することもできます。

ヒープ・ダンプはHPROFバイナリ形式であるため、この形式をインポートできる任意のツールを使用して解析できます。 たとえば、jhatツールを使用すると、そのダンプの基本的な解析を行うことができます。 jhatツールの詳細は、「jhatユーティリティ」を参照してください。

例D-1は、このフラグを設定してメモリー不足の結果を示しています。

例D-1 メモリー不足のサンプル・コード

$ java -XX:+HeapDumpOnOutOfMemoryError -mn256m -mx512m ConsumeHeap
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid2262.hprof ...
Heap dump file created [531535128 bytes in 14.691 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at ConsumeHeap$BigObject.(ConsumeHeap.java:22)
        at ConsumeHeap.main(ConsumeHeap.java:32)

ConsumeHeapによってJavaヒープがいっぱいになり、メモリーが使い果たされます。 java.lang.OutOfMemoryError例外がスローされると、ヒープ・ダンプ・ファイルが作成されます。 この場合、そのファイルは507MBで、現在のディレクトリにjava_pid2262.hprofという名前で作成されます。

デフォルトでは、前述の例のように、ヒープ・ダンプはVMの作業ディレクトリにあるjava_pidpid.hprofと呼ばれるファイル内に作成されます。 -XX:HeapDumpPath=オプションを使用すれば、別のファイル名またはディレクトリを指定できます。 たとえば、-XX:HeapDumpPath=/disk2/dumpsを指定すると、ヒープ・ダンプは/disk2/dumpsディレクトリに生成されます。

-XX:OnErrorオプション

致命的エラーが発生すると、Java HotSpot VMはオプションでユーザー指定のスクリプトまたはコマンドを実行できます。 スクリプトまたはコマンドは、-XX:OnError=stringコマンド行オプションを使って指定されます(stringは単一のコマンド、またはセミコロンで区切られたコマンドのリスト)。 この文字列内では、%pのすべての出現箇所が現在のPIDに置き換えられ、%%のすべての出現箇所が単一の%に置き換えられます。 次の例は、javaランチャを使用してMyAppという名前のJavaアプリケーションを起動するときに、このオプションをどのように使用できるかを示しています。

  • java -XX:OnError="pmap %p" MyApp

    Oracle Solarisオペレーティング・システムでは、pmapコマンドはプロセスのアドレス空間に関する情報を表示します。 前述の例では、致命的エラーが発生した場合にpmapコマンドが実行されて、現在のプロセスのアドレス空間が表示されます。

  • java -XX:OnError="cat hs_err_pid%p.log | mail support@acme.com" MyApp

    前述の例では、致命的エラーが発生した場合に、致命的エラー・ログ・ファイルの内容がサポート・エイリアスにメール送信されます。

  • java -XX:OnError="gcore %p; dbx - %p" MyApp

    Oracle Solarisオペレーティング・システムでは、gcoreコマンドは指定されたプロセスのコア・イメージを作成し、dbxコマンドはデバッガを起動します。 前述の例では、予想外のエラーが発生した場合に、gcoreコマンドが実行されて現在のプロセスのコア・イメージが作成され、さらにデバッガが起動されてそのプロセスに接続されます。

  • java -XX:OnError="gdb - %p" MyApp

    Linuxでは、gdbコマンドはデバッガを起動します。 前述の例では、予想外のエラーが発生した場合にgdbデバッガが起動され、現在のプロセスに接続されます。

  • java -XX:OnError="userdump.exe %p" MyApp

    Windowsでは、userdump.exeユーティリティは指定されたプロセスのクラッシュ・ダンプを作成します。 このユーティリティは、Windowsに付属していないため、Microsoft OEM Support Toolsパッケージの一部としてMicrosoftのWebサイトからダウンロードするようにしてください。

    前述の例では、致命的エラーが発生した場合にuserdump.exeユーティリティが実行されて、現在のプロセスのコア・ダンプが作成されます。


    ノート:

    この例では、userdump.exeユーティリティへのパスがPATH変数に定義されているものと想定します。
    ヒント

    userdump.exeユーティリティがインストールされていない場合は、ワトソン博士のデバッガをポストモーテム・デバッガとして構成し、予想外のエラーが発生した場合にクラッシュ・ダンプが作成されるようにできます。


Windowsでのクラッシュ・ダンプの作成の詳細は、「Windowsでのクラッシュ・ダンプの収集」を参照してください。

-XX:ShowMessageBoxOnErrorオプション

このオプションが設定されているときに致命的エラーが発生した場合、HotSpot VMはその致命的エラーに関する情報を表示し、ネイティブ・デバッガが起動されるかどうかを指定するようユーザーに求めます。 Oracle SolarisおよびLinuxオペレーティング・システムの場合は、その出力とプロンプトがアプリケーション・コンソール(標準入力と標準出力)に送信されます。 Windowsの場合は、Windowsメッセージ・ボックスが表示されます。

例D-2は、Linuxシステムで発生した致命的エラーを示しています。

例D-2 Linuxシステムでの致命的エラー

==============================================================================
Unexpected Error
------------------------------------------------------------------------------
SIGSEGV (0xb) at pc=0x2000000001164db1, pid=10791, tid=1026

Do you want to debug the problem?

To debug, run 'gdb /proc/10791/exe 10791'; then switch to thread 1026
Enter 'yes' to launch gdb automatically (PATH must include gdb)
Otherwise, press RETURN to abort...
==============================================================================

この場合は、SIGSEGVエラーが発生し、ユーザーはgdbデバッガが起動されてプロセスに接続するのかどうかを指定するよう求められます。 ユーザーが「y」または「yes」と入力すると、gdbが起動されます(それがPATH変数内に設定されているものと想定)。

Oracle Solarisオペレーティング・システムでは、メッセージは前述のものと似ていますが、dbxデバッガを起動するようユーザーが求められる点が異なります。

Windowsでは、メッセージ・ボックスが表示されます。 ユーザーが「はい」をクリックした場合、VMはデフォルト・デバッガの起動を試みます。 このデバッガは、「Windowsでのクラッシュ・ダンプの収集」で説明されているレジストリ設定によって構成されます。 Microsoft Visual Studioがインストールされている場合、デフォルト・デバッガは通常msdev.exeになるよう構成されます。

前述の例では、PID (pid=10791)だけでなく、スレッドID (tid=1026)も出力に含まれています。 デバッガが起動された場合、デバッガの初期ステップの1つでスレッドが選択され、そのスタック・トレースが取得される可能性があります。

プロセスは応答を待っているので、ほかのツールを使ってクラッシュ・ダンプを取得したり、プロセスの状態を問い合わせたりできます。 たとえば、Oracle Solarisオペレーティング・システムでは、gcoreユーティリティを使用してコア・ダンプを取得できます。

Windowsでは、userdumpまたはwindbgプログラムを使用して、ワトソン博士のクラッシュ・ダンプを取得できます。 windbgユーティリティはMicrosoftのDebugging Tools for Windowsに含まれており、「Windowsでのクラッシュ・ダンプの収集」で説明されています。 windbgで、「Attach to a Process」メニュー・オプションを選択すると、プロセスの一覧が表示されてPIDを入力するよう求められます。 HotSpot VMでは、PIDを含むメッセージ・ボックスが表示されます。 選択すると、.dump /fコマンドを使ってクラッシュ・ダンプを強制できます。 例D-1は、crash.dumpというファイルに作成されたクラッシュ・ダンプの例です。

図D-1 windbgで作成されたクラッシュ・ダンプの例

図D-1の説明が続きます
「図D-1 windbgで作成されたクラッシュ・ダンプの例」の説明

一般に、デバッガ・ツールを利用できる開発環境では、-XX:+ShowMessageBoxOnErrorオプションの方が役立ちます。 致命的エラーの発生時に、決められた一連のコマンドまたはスクリプトが実行される本番環境には、-XX:OnErrorオプションの方が適しています。

その他の-XXオプション

トラブルシューティングに役立つ可能性のある-XXコマンド行オプションは、他にもいくつかあります。

  • -XX:OnOutOfMemoryError=string

    このオプションを使用すると、OutOfMemoryError例外がスローされたときに実行されるコマンドまたはスクリプトを指定できます。

  • -XX:ErrorFile=filename

    このオプションを使用すると、致命的エラー・ログ・ファイルの場所を指定できます(「致命的エラー・ログの場所」を参照)。

  • -xx:HeapDumpPath=path

    このオプションを使用すると、ヒープ・ダンプの場所を指定できます(「-XX:HeapDumpOnOutOfMemoryErrorオプション」を参照)。

  • -XX:MaxPermSize=size

    このオプションを使用すると、Permanent世代のメモリーのサイズを指定できます(「Exception in thread thread_name: java.lang.OutOfMemoryError: GC Overhead limit exceeded」を参照)。

  • -XX:+PrintCommandLineFlags

    このオプションを使用すると、VMコマンド行フラグをすべて出力できます(「バグ・レポート用のデータの収集」を参照)。

  • -XX:+PrintConcurrentLocks

    このオプションを使用すると、Ctrl+Breakハンドラによって、各スレッドが所有する並行ロックの一覧が出力されます。

  • -XX:+PrintClassHistogram

    このオプションを使用すると、Ctrl+Breakハンドラによって、ヒープ・ヒストグラムが出力されます。

  • -XX:+PrintGCDetails and-XX:+PrintGCTimeStamps

    これらのオプションを使用すると、ガベージ・コレクションに関する詳細情報を出力できます(「-verbose:gcオプション」を参照)。

  • -XX:+UseAltSigs

    Oracle Solaris 8および9オペレーティング・システムでこのオプションを使用すると、SIGUSR1およびSIGUSR2のかわりに代替シグナルを使用するよう、HotSpot VMに指示できます(「Oracle SolarisおよびLinuxオペレーティング・システムでのシグナル処理」を参照)。

  • -XX:+UseConcMarkSweepGC-XX:+UseSerialGCおよび-XX:+UseParallelGC

    これらのオプションを使用すると、使用されるガベージ・コレクション・ポリシーを指定できます(「ガベージ・コレクション中のクラッシュの回避」を参照)。

目次      

Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.