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