Windows でのネイティブ・メモリーの枯渇
Java 仮想マシン (VM) を実行するオペレーティング・システム・プロセスに、ダンプ・ファイルを生成するための十分なメモリーがありません。
VM を実行しているオペレーティング・システム・プロセスで使用可能なネイティブ・メモリーが不足しているために、VM が Windows でダンプ・ファイルを生成できない場合があります。 例えば、以下の出力は、以下のように書き込まれます。STDERR:
Unhandled exception
Type=Segmentation error vmState=0x00000001
J9Generic_Signal_Number=00000004 ExceptionCode=c0000005 ExceptionAddress=707D1A95 ContextFlags=0001003f
Handler1=7064F300 Handler2=7134EF90 InaccessibleAddress=00000000
EDI=01F1FB78 ESI=00000000 EAX=00001388 EBX=003BBA18
ECX=00000000 EDX=01DB0048
EIP=707D1A95 ESP=01F1FB5C EBP=01F1FB68 EFLAGS=00010246
GS=002B FS=0053 ES=002B DS=002B
Module=C:\test\native\OOMCrash\oom.dll
Module_base_address=707D0000 Offset_in_DLL=00001a95
Target=2_60_20110521_082820 (Windows 7 6.1 build 7601 Service Pack 1)
CPU=x86 (2 logical CPUs) (0x12e54d000 RAM)
----------- Stack Backtrace -----------
---------------------------------------
JVMDUMP006I Processing dump event "gpf", detail "" - please wait.
JVMDUMP032I JVM requested System dump using 'C:\test\native\OOMCrash\core.20110525.134230.4148.0001.dmp'
in response to an event
JVMDUMP012E Error in System dump: Dump failed - could not load library DBGHELP.DLL以下のエラーが表示される場合もあります。JVMDUMP012E Error in System dump: Dump failed - could not begin dump threadライブラリー DBGHELP.DLL は、VM が Windows でシステム・ダンプ・ファイルを生成するために必要であり、SDK で提供されます。 このライブラリーをロードできない場合は、プロセスによって、使用可能なネイティブ・メモリーが使い尽くされています。
このような状況では、Windows デバッガー ( WinDbg、Visual Studio、Windows タスク・マネージャーなど) を使用して、システム・ダンプ・ファイルを生成できます。 これらのデバッガーは、必要なライブラリーを別個のプロセスでロードします。 これらのデバッガを使用してダンプ・ファイルを取得するには、障害が発生した時点でVMを強制的に停止させる必要があるかもしれない。 前の例のように障害がクラッシュである場合、-Xrs コマンド行オプションを設定できます。 このオプションを使用すると、クラッシュが発生したときに、オペレーティング・システムによって VM が停止され、Windows ダイアログ・ボックスが表示されます。 障害がクラッシュではない場合 (例えば、VM が Java™ 例外のダンプ・ファイルを生成していた場合)、トレース・ポイントでスリープ・トリガー・アクションを使用して、ダンプ・ファイルの取得中に VM を停止することができます。 次のコマンドを使用します。
java "-Xtrace:print=j9dmp,trigger=tpnid{j9dmp.10,sleep}"