使用 maxsize=1g 的飞行记录器仍会返回缺少时间窗口的跟踪

Posted

技术标签:

【中文标题】使用 maxsize=1g 的飞行记录器仍会返回缺少时间窗口的跟踪【英文标题】:Using flight recorder with maxsize=1g still returns a trace with a missing time window 【发布时间】:2016-02-22 12:27:35 【问题描述】:

我有一个资源密集型、基于 java-8 的命令行应用程序,我经常使用飞行记录器对其进行分析。我经常注意到的是,当我在任务控制中打开飞行记录器文件(jfr)时,我会看到该进程运行的完整时间跨度,但我错过了该时间窗口前 60-70% 的事件。

我尝试过使用飞行记录器选项,这是我目前正在使用的:

-Djava.library.path=/some/path/lib -Xmx50G -XX:+UnlockCommercialFeatures -XX:+UseG1GC -XX:+FlightRecorder -XX:StartFlightRecording=name=MyRecording,settings=profile -XX:FlightRecorderOptions= defaultrecording=true,maxsize=1g,maxage=1h,dumponexit=true,dumponexitpath=/some/path"

我希望这会自动捕获记录,当过程完成时,记录将保存到 /some/path,并且它保存的文件将达到千兆字节。有谁知道提供的正确选项是什么?

【问题讨论】:

【参考方案1】:

我会回答我自己的问题。经过一些实验和反复试验后,您似乎需要添加“disk=true”。

所以最终的java args变成了:

-Djava.library.path=/some/path/lib -Xmx50G -XX:+UnlockCommercialFeatures -XX:+UseG1GC -XX:+FlightRecorder -XX:StartFlightRecording=name=MyRecording,settings=profile -XX:FlightRecorderOptions= defaultrecording=true,disk=true,maxsize=1g,maxage=1h,dumponexit=true,dumponexitpath=/some/path"

【讨论】:

命令行可以简化,如果你运行的是JDK8u40或更高版本。 +UnlockCommercialFeatures -XX:StartFlightRecording=name=MyRecording,settings=profile,filename=/some/path/myrecording.jfr,maxsize=1g,maxage=1h,dumponext=true

以上是关于使用 maxsize=1g 的飞行记录器仍会返回缺少时间窗口的跟踪的主要内容,如果未能解决你的问题,请参考以下文章

踩坑记录Mysql查询使用group_concat函数后,如果查询无结果,仍会返回一条空数据

踩坑记录Mysql查询使用group_concat函数后,如果查询无结果,仍会返回一条空数据

Winston - 使用 maxsize 时记录轮换顺序

IOS unregisterForRemoteNotifications 在飞行模式下不起作用

java飞行记录器连接错误

当我使用 Health App 中的 Delete All 操作时,Health kit 仍会返回已删除的数据