ダイレクト・バイト・バッファーのアプリケーション使用のトレース

トレース機能を使用して、ダイレクト・バイト・バッファーを使用するアプリケーションによるメモリーの使用過多または OutOfMemoryError 例外の原因を診断できます。

ダイレクト・バイト・バッファーの使用に関連するメモリー問題の診断に役立つトレース・ポイントを使用できます。 トレース・ポイント ID は j9jcl.335 から j9jcl.338 までで、形式は次のとおりです。
  • 追跡・ポイントj9jcl.335は、割り当てられるメモリーの量を出力します。 >sun_misc_Unsafe_allocateDBBMemory(0x%zx)
  • 追跡・ポイントj9jcl.336は、メモリーを割り当てられない場合に出力します:<sun_misc_Unsafe_allocateDBBMemory -- OutOfMemory
  • 追跡・ポイントj9jcl.337は、割り当てられたメモリーのアドレス<sun_misc_Unsafe_allocateDBBMemory result = %pを出力します。
  • 追跡・ポイントj9jcl.338は、解放されるメモリーのアドレスを出力します。 >sun_misc_Unsafe_freeDBBMemory(%p)
注: トレース・ポイント ID は予告なしに変更される場合があります。 信頼できる結果を得るには、 J9 VM リファレンスの「 トレース・ポイントのトレース・ポイント ID の判別 」を参照してください。

追跡ポイントIDは、コンポーネント内の問題を追跡するように、-Xtraceオプションとともに使用できます。 この-Xtraceコマンドは、出力をファイルまたはコンソール、あるいは問題が発生したときにファイルにダンプされる内部バッファーに発送できます。 問題の診断に役立つトレース機能に関連するオプションはたくさんあります。 J9 VM リファレンスの「 Java アプリケーションのトレース 」セクションを参照してください。 -Xtrace オプションの設定について詳しくは、 J9 VM リファレンスの「 トレースの制御 」を参照してください。

例えば、トレース・ポイントが呼び出されたときにコンソール出力を生成するには、次のコマンドを使用します。
-Xtrace:print=j9jcl.335-338
生成される出力は次のようになります。
17:41:05.420 0x61fa00           j9jcl.335      > sun_misc_Unsafe_allocateDBBMemory(0x21d8)
17:41:05.421 0x61fa00           j9jcl.337      < sun_misc_Unsafe_allocateDBBMemory result = 6B71CC10
17:41:05.428*0x6b926600           j9jcl.338      > sun_misc_Unsafe_freeDBBMemory(6B71CC10)
また、次のコマンドを使用して、コンソール出力にスタック・トレースを含めることもできます。
-Xtrace:print=j9jcl.335-338,trigger=tpnid{j9jcl.335-338,jstacktrace}
以下に、コマンドによって生成された、スタック・トレースの出力を含む例を示します。
-Xtrace:print=j9jcl.335-338,trigger=tpnid{j9jcl.335,jstacktrace},trigger=tpnid{j9jcl.338,jstacktrace}
17:54:40.377 0x2dfd00           j9jcl.335      > sun_misc_Unsafe_allocateDBBMemory(0x21d8)
17:54:40.378 0x2dfd00       j9trc_aux.0        - jstacktrace:
17:54:40.379 0x2dfd00       j9trc_aux.1        - [1] sun.misc.Unsafe.allocateDBBMemory (Native Method)
17:54:40.380 0x2dfd00       j9trc_aux.1        - [2] java.nio.DirectByteBuffer.<init> (DirectByteBuffer.java:102)
17:54:40.381 0x2dfd00       j9trc_aux.1        - [3] java.nio.ByteBuffer.allocateDirect (ByteBuffer.java:288)
17:54:40.382 0x2dfd00       j9trc_aux.1        - [4] test.Test1a.allocatebuf (Test1a.java:10)
17:54:40.383 0x2dfd00       j9trc_aux.1        - [5] test.Test1a.main (Test1a.java:14)
17:54:40.383 0x2dfd00           j9jcl.337      < sun_misc_Unsafe_allocateDBBMemory result = 6B79D770
17:54:40.388*0x6ba02300           j9jcl.338      > sun_misc_Unsafe_freeDBBMemory(6B79D770)
17:54:40.389 0x6ba02300       j9trc_aux.0        - jstacktrace:
17:54:40.390 0x6ba02300       j9trc_aux.1        - [1] sun.misc.Unsafe.freeDBBMemory (Native Method)
17:54:40.391 0x6ba02300       j9trc_aux.1        - [2] java.nio.DirectByteBuffer$Deallocator.run (DirectByteBuffer.java:72)
17:54:40.392 0x6ba02300       j9trc_aux.1        - [3] sun.misc.Cleaner.clean (Cleaner.java:125)
17:54:40.393 0x6ba02300       j9trc_aux.1        - [4] java.lang.ref.ReferenceQueue.enqueue (ReferenceQueue.java:137)
17:54:40.393 0x6ba02300       j9trc_aux.1        - [5] java.lang.ref.Reference.enqueueImpl (Reference.java:74)