【问题标题】:How to avoid truncated stack traces with Java Flight Recorder如何使用 Java Flight Recorder 避免截断堆栈跟踪
【发布时间】:2015-11-14 02:51:42
【问题描述】:

我正在使用 Oracle Java Flight Recorder 收集 Java 应用程序的堆栈跟踪样本。这些堆栈跟踪允许我最终生成CPU Flamegraph

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

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

【问题讨论】:

    标签: java jvm jmc jfr flamegraph


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢马库斯!将来有机会在运行时进行配置吗?我是 MBean 功能的忠实拥护者,如果能够将此作为选项传递给 jfrStart 或通过设置传递,那就太好了。
    • 我认为该标志是飞行记录器引擎的通用设置,当您调用MBean开始特定记录时,它已经启动,因此您仍然需要命令行上的标志.
    • 对于 JDK 9,我们正在考虑能够在运行时配置最大堆栈深度,作为记录配置或模板的一部分。
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2015-06-07
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多