如何在 Java Flight Recorder 采样中包含 IO 绑定方法?

2024-01-10

我在启动时通过为测试中的 Java 程序指定以下 CLI 选项来启动 JFR:

-Xmx24g -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile

测试执行需要 90 秒才能完成。

在 Java Mission Control 中打开 JFR 转储后,JMC 中的“调用树”选项卡如下所示:

每秒少于 1 个样本。这使得详细的深入分析、热门方法和概述选项卡实际上毫无用处。经过初步调查,确定方法采样设置为默认值 10 毫秒,事实证明,这一意外结果是因为 90 秒中约 98% 的时间花在等待套接字 I/O 上,同时执行各种不同的数据库读取,所以我只在另外 2% 的时间内获取方法样本。

如何在方法时间中包含 I/O 密集型样本,以帮助找到花费最多时间等待数据库结果的跟踪?该过程包含多个地方的数据库查询,这些查询又从多个其他地方调用,因此猜测缓慢的调用路径并不容易。


JDK 8 上的最低方法执行采样率为 10 毫秒,这是通过配置文件设置获得的值。假设应用程序有负载,这对于 90 秒的录制来说应该绰绰有余。 JDK 11 中存在一个错误,导致样本太少,但我可以从屏幕截图中看到您正在运行早期版本。

如果您想知道应用程序在等待时正在做什么,您应该查看“延迟”选项卡(而不是“热门方法”)或“套接字读取”/“套接字写入”选项卡。有 Socket Read、Socket Write、Monitor Blocked、Monitor Wait 等事件,但如果您使用异步 I/O,则可能不适用。

EDIT

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java Flight Recorder 采样中包含 IO 绑定方法? 的相关文章

随机推荐