【问题标题】:Are the call-stacks from a RecordedFile in JFR complete?JFR 中 RecordedFile 的调用堆栈是否完整?
【发布时间】:2021-02-06 18:41:23
【问题描述】:

在使用 Java Flight Recorder 进行录制期间,在此期间调用的所有方法是否都会列在 RecordedFile 中?

鉴于:

  • 我没有记录事件的子集。
  • 我没有创建任何自定义事件。
  • 我正在使用 AdoptOpenJDK 11.0.10

提前感谢您的任何回答。

【问题讨论】:

    标签: java jvm method-call jfr


    【解决方案1】:

    没有。

    首先,JFR 是一个采样分析器。它不记录所有方法转换;它取而代之的是定期采样。 IE。在指定的时间间隔内,它会查看当前正在运行的线程的调用堆栈。

    其次,当 JFR fails to traverse 是一个有效的 Java 堆栈时,它往往会遗漏许多样本。我在my presentation 中演示了这种效果:JFR 在 10 秒的执行中只捕获了一个无意义的应用程序堆栈跟踪。

    您可以通过调整采样period 设置来选择 JFR 收集的样本数量。周期越小 - JFR 收集的堆栈样本越多。然而,最小的可能周期仅为 1 ms。此外,采样频率不能很好地与运行线程的数量成比例。无论您的服务器有多少内核,只有一个线程可以收集所有 ExecutionSample 事件。

    【讨论】:

    • 发生这种情况是因为这些配置文件仅在安全点上,对吗?我还假设 async-profiler 对此免疫?
    • 我将您的回复标记为答案。非常详细,非常有用!我一直在看你链接的视频。在其中一个视频中,您提到了 Jetbrains 的某个人正在为 Windows 开发类似的东西。你有这方面的最新消息吗?或者我可以阅读/观看的内容?
    • @Eugene JFR 不依赖安全点,但JVM bugs 阻止它在某些点获取堆栈跟踪。 Async-profiler 有解决这些错误的方法。
    • @Byebye 据我所知,他们在 Windows 上有一个 async-profiler 的工作原型,并希望它能够在 IDEA 的未来版本之一中发布。不过没有义务。
    猜你喜欢
    • 2021-08-06
    • 2014-08-13
    • 2010-11-05
    • 2011-03-01
    • 2021-06-28
    • 2012-06-29
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多