Включить пробы dtrace для java, как оказалось, не совсем очевидно. А всё дело в механизме lazy load, который активирует их только тогда, когда явно к ним обратится и только при выполнении таких условий:
1) java должна поддерживать hotspot:
# java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Server VM (build 24.60-b09, mixed mode)
2) java процесс должен быть запущен с параметром
+ExtendedDTraceProbes
но лучше также добавить и такие:
+DTraceMethodProbes, +DTraceAllocProbes, +DTraceMonitorProbes.
Вот, как это выглядит:
# ps -efc | grep java
root 2398 1186 TS 49 12:05:28 pts/2 0:00 grep java
root 1050 1 TS 59 Jul 21 ? 8:19 /bin/java -Xms256m -Xmx1g -Xss256k -Djava.awt.headless=true -XX:+UseParNewGC -X
# pargs 1050 | grep -i dtrace
argv[7]: -XX:+ExtendedDTraceProbes
argv[8]: -XX:+DTraceMethodProbes
argv[9]: -XX:+DTraceAllocProbes
argv[10]: -XX:+DTraceMonitorProbes
3) Активировать пробы:
# dtrace -n hotspotPID:::'{@[probename]=count()}'
где PID – номер pid’a java-процесса. Например (номер pid’a взят из пункта 2):
# dtrace -n hotspot1050:::'{@[probename]=count()}' dtrace: description 'hotspot1050:::' matched 66 probes ^C thread-unpark 1 thread-park-begin 11 thread-park-end 11 thread-sleep-begin 130 thread-sleep-end 130 object-alloc 467 method-entry 29316 method-return 29316
Теперь можно посмотреть пробы:
# dtrace -l | grep hotspot | wc -l
539