如何使用 Java Flight Recorder 避免截断堆栈跟踪

How to avoid truncated stack traces with Java Flight Recorder

我正在使用 Oracle Java Flight Recorder to collect stack trace samples of a Java application. Theses stack traces allows me to eventually produce a CPU Flamegraph

我的问题是深度超过 64 帧的堆栈跟踪被 Java 飞行记录器截断。在 Flamegraph 中很容易观察到,使用调试器我可以观察到没有 FLRStackTrace 超过 64 FLRFrames 并且几乎所有具有 64 帧的堆栈跟踪都将其 TruncationState 设置为 TRUNCATED.

有谁知道这个 64 帧的限制是否可以增加?如果堆栈跟踪不完整,火焰图就没用了。

是的!但如果您 运行 使用 JRockit,则不会。如果在 HotSpot 上 运行,只需使用标志 -XX:FlightRecorderOptions=stackdepth=<n>,其中 n,如您所见,默认为 64。

更多信息在这里: http://hirt.se/blog/?p=364