JFR 如何计算事件开始时间?

Posted

技术标签:

【中文标题】JFR 如何计算事件开始时间?【英文标题】:How does JFR calculate Event Start Time? 【发布时间】:2020-09-04 13:03:46 【问题描述】:

我正在使用 jcmd 工具使用 JFR 分析应用程序。有时,当我生成 JFR 文件时,开始录制的时间比我开始录制的时间早得多。例如:

JFR recording

我已经搜索过关于这个问题的信息,但我只是找到了这个链接:

https://blogs.oracle.com/poonam/clarifying-some-confusion-around-java-flight-recordings

正如这篇博文所说,我在 JMC 事件日志上搜索了事件,但在开始录制之前我没有找到任何事件。

所以我的问题是,JFR 如何计算“事件开始时间”?

我不知道它是否相关,但我还包括使用jcmd 发送的命令:

jcmd 1 JFR.start name=profile settings=profile maxage=10m

几分钟后,我将转储并停止录制:

jcmd 1 JFR.dump name=profile filename=/tmp/recording.jfr

jcmd 1 JFR.stop name=profile

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

事件开始时间是事件开始的时间。

在某些情况下,事件可能会在录制之前开始。例如,

    开始录制 A 活动开始(开始时间已过) 录制 A 结束 开始录制 B 活动结束(已结束时间) 录制 B 结束

录制 B 将包含事件,因为它在事件结束时写入文件,但开始时间将在录制 B 开始之前发生。发生这种情况的其他原因是不同 CPU 上的时钟之间存在偏差。

【讨论】:

非常感谢基尔!你的回答很有帮助

以上是关于JFR 如何计算事件开始时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建可重用的即时(持续时间)Java Flight Recorder JFR 事件?

显式设置 JFR 事件的持续时间

为啥 JFR 会跳过事件字段

JDK14的新特性:JFR,JMC和JFR事件流

JDK14的新特性:JFR,JMC和JFR事件流

内置 JFR(Java Flight Recorder)事件记录在哪里?