애플리케이션의 직접 바이트 버퍼 사용 추적

추적 기능을 사용하여 직접 바이트 버퍼를 사용하는 애플리케이션에서 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)