追蹤應用程式使用直接位元組緩衝區
您可以使用追蹤機能來診斷記憶體用量過多的原因,或使用直接位元組緩衝區之應用程式的 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 可以與 -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)