Explicitメモリブロックの初期化が失敗した場合の確認と対処について説明します。
Explicitメモリブロックの数が最大になると,それ以上Explicitメモリブロックを初期化できなくなります。
この場合は,Explicitメモリブロックの数を減らしてください。
ここでは,Explicitメモリブロックの初期化が失敗しているかどうかの確認方法について説明します。
明示管理ヒープ機能イベントログで調査をするためには,あらかじめJavaVMの-XX:HitachiExplicitMemoryLogLevelオプションに「normal」を指定しておく必要があります。これによって,GCが発生するごとに,Explicitメモリブロックの初期化に失敗した回数が明示管理ヒープ機能イベントログに出力されるようになります
出力例を示します。
[ENS]<Thu Oct 21 14:55:50 2007>[EH: 12672K->12800K(12800K/65536K)][E/F/D: 200/0/0][cause:GC][CF: 0] |
太字で示した部分が,前回の出力から今回の出力までの間にExplicitメモリブロックの初期化に失敗した回数です。この例の場合は,「0」です。初期化失敗が発生していない,問題のない状態です。
また,JavaVMの-XX:HitachiExplicitMemoryLogLevelオプションに「verbose」を指定した場合,Explicitメモリブロックの初期化失敗イベントについての情報も出力されます。
出力例を示します。
[EVO]<Tue Jul 24 01:23:51 2007>[Creation failed][EH: 32760K(0K)/32768K/65536K][E/F/D: 65535/0/0][Thread: 0x00035a60] |
太字で示した部分で,Explicitメモリブロック初期化に失敗したことが確認できます。また,[EVO][Thread: 0x00035a60]で始まる行は,イベントが発生した時のスタックトレースを示しています。
さらに,JavaVMの-XX:HitachiExplicitMemoryLogLevelオプションに「debug」を指定した場合,初期化に失敗したイベント以外のExplicitメモリブロック初期化イベントの詳細情報が出力されます。Explicitメモリブロック数が一定以上になると,初期化は失敗します。このため,初期化に失敗する前の初期化イベントの情報が,調査に役立つことがあります。
出力例を次に示します。
[EVO]<Tue Jul 24 01:23:51 2007>[Created]["BasicExplicitMemory-2" eid=2(0x1234568)/B][Thread: 0x00035a60] |
太字で示した部分で,Explicitメモリブロック初期化イベントであることが確認できます。また,[EDO][Thread: 0x00035a60]で始まる行は,イベントが発生した時のスタックトレースを示しています。
スレッドダンプで出力された情報からは,Explicitメモリブロック初期化失敗の直接要因は確認できませんが,Explicitメモリブロックの個数は調べられます。
出力例を次に示します。
Explicit Heap Status |
太字で示した部分がExplicitメモリブロックの個数を示しています。
次に示すメソッドを使用して,Explicitメモリブロックの個数を調査できます。
ただし,このAPIでは,Explicitメモリブロック初期化失敗の直接の要因は確認できません。