在macOS上使用DTrace对Java应用程序进行性能分析

7

我正在尝试使用macOS Sierra 10.12上的DTrace对Java应用程序进行分析。我正在使用JDK8:

⋊> ~ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

⋊> ~ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

我的最终目标是跟踪特定包的所有Java方法入口和出口。 DTrace Probes in HotSpot VM使用HotSpot DTrace探针的Mac OS X端口似乎表明这在macOS上实际上应该得到支持。然而,即使我的Java应用程序正在运行,也没有hotspot探针可用,jstack()似乎失败了。
⋊> ~ pgrep java
24564

⋊> ~ sudo dtrace  -ln 'hotspot*:::'
dtrace: system integrity protection is on, some features will not be available

   ID   PROVIDER            MODULE                          FUNCTION NAME
dtrace: failed to match hotspot*:::: No probe matches description

⋊> ~ sudo dtrace -n 'syscall::read:entry /execname == "java"/ { jstack(); }'
dtrace: system integrity protection is on, some features will not be available

dtrace: description 'syscall::read:entry ' matched 1 probe
dtrace: error on enabled probe ID 1 (ID 153: syscall::read:entry): invalid address (0xe2e3275e) in action #1
dtrace: error on enabled probe ID 1 (ID 153: syscall::read:entry): invalid address (0xe2e3275e) in action #1
dtrace: error on enabled probe ID 1 (ID 153: syscall::read:entry): invalid address (0xe2e3275e) in action #1

提供路径到 libjvm.dylibdtrace 命令似乎没有帮助:
⋊> ~ ll "$JAVA_HOME/jre/lib/server/"
total 31616
-rw-rw-r--  1 root  wheel   1.4K Jun 22 15:02 Xusage.txt
-rwxrwxr-x  1 root  wheel    15K Jun 22 15:01 libjsig.dylib
-rwxrwxr-x  1 root  wheel    15M Jun 22 15:02 libjvm.dylib

⋊> ~ sudo dtrace -L "$JAVA_HOME/jre/lib/server/" -ln 'hotspot*:::'
dtrace: system integrity protection is on, some features will not be available

   ID   PROVIDER            MODULE                          FUNCTION NAME
dtrace: failed to match hotspot*:::: No probe matches description

那我缺少什么? 如何使用DTrace工具对Java应用程序进行性能分析?

1个回答

7

很抱歉,我之前过于快速地排除了系统完整性保护的可能原因。

在恢复操作系统中执行csrutil enable --without dtrace后(启动时按下⌘R),hotspot探针现在可以显示出来:

⋊> ~ sudo dtrace -ln 'hotspot*:::' | wc -l
    1039

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接