Включаем dtrace пробы hotspot для java

Включить пробы 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *