RHEL OpenJDK를 사용하는 경우 (또는 비슷한 점은 Oracle의 JDK가 아님) SystemTap 을 사용할 수 있습니다 .
일부 프로브는 자바 명령 행 옵션을 사용하여 사용할 수 있습니다 -XX:+DTraceMethodProbes
, -XX:+DTraceAllocProbes
, -XX:+DTraceMonitorProbes
. 이러한 프로브를 활성화하면 프로그램 성능에 상당한 영향을 미칩니다.
SystemTap 스크립트의 예는 다음과 같습니다.
#!/usr/bin/stap
probe hotspot.class_loaded {
printf("%12s [???] %s\n", name, class);
}
probe hotspot.method_entry,
hotspot.method_return {
printf("%12s [%3d] %s.%s\n", name, thread_id, class, method);
}
probe hotspot.thread_start,
hotspot.thread_stop {
printf("%12s [%3d] %s\n", name, id, thread_name);
}
probe hotspot.monitor_contended_enter,
hotspot.monitor_contended_exit {
printf("%12s [%3d] %s\n", name, thread_id, class);
}
jstack()
프로세스의 Java 스택을 가져 오는 데 사용할 수도 있지만 JVM 전에 SystemTap을 시작한 경우에만 작동합니다 .
SystemTap은 모든 메소드 를 추적 합니다 . 또한 메소드의 인수를 얻을 수 없습니다. 다른 옵션은 JVMTI라고하는 JVM 고유의 추적 기능을 사용하는 것입니다. 가장 유명한 JVMTI 구현 중 하나는 BTrace 입니다.