如何使用系统分析器禁用Java堆栈帧优化或配置文件堆栈?

时间:2014-06-05 23:22:03

标签: java linux jvm jvm-hotspot dtrace

系统分析器(如DTrace和Linux perf_events)能够分析来自JVM的堆栈跟踪。现在,除了符号(这是另一个问题),DTrace和perf_events都会收集许多只有1帧的堆栈。这些是部分不完整的堆栈。

我已经尝试过DTrace jstack(),以及带有帧指针和矮人堆栈展开的Linux perf_events。

我认为这是由于热点编译优化的帧。有没有办法禁用此优化,以便标准系统分析器(如Solaris DTrace和Linux perf)工作?

我已经尝试了以下选项:-XX:+ DeoptimizeRandom -XX:MaxInlineSize = 0 -XX:-OmitStackTraceInFastThrow -XX:+ UnlockDiagnosticVMOptions -XX:+ ShowHiddenFrames

1 个答案:

答案 0 :(得分:6)

这是一个JVM问题,最好用bug来描述:

https://bugs.openjdk.java.net/browse/JDK-6276264

虽然这描述了DTrace jstack()的问题,但我相信相同的优化(使用帧指针作为寄存器)会破坏perf_events。

这可以在JDK 9中修复。参见:

http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2014-June/014842.html

感谢热点开发者回答这个问题。