gpt4 book ai didi

java - 使用 Java Flight Recorder 和 Java Mission Control 监控锁

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:23:05 27 4
gpt4 key购买 nike

我想做什么

我有一个 Java 程序,我正在努力改进它。我怀疑代码中的同步块(synchronized block)会损害性能,但我想在接触我的代码之前确保这是我的问题。

我是如何进行的

为了检查同步块(synchronized block)是否确实是问题所在,我使用 Flight Recorder 在测试服务器上记录了我的程序的执行,在我的桌面上下载了创建的 jfr 文件并使用 Java Mission Control 打开它.但是 Java Application 中的 Lock Instances 页面没有显示任何内容。我得到的唯一线索是结果 View 中的一条消息,内容如下:

The Java Blocking rule requires event(s) to be available from the following event types: com.oracle.jdk.JavaMonitorEnter

因此我假设必须有某种选项可以与飞行记录器一起激活,但到目前为止我没能找到它。

我的问题

如何启用 Java Flight Recorder 记录 com.oracle.jdk.JavaMonitorEnter 类型的事件?
或者我遗漏了其他东西并且有更好的方法来计算在 Java 程序中对同步块(synchronized block)进行了多少阻塞?

我的环境

我使用的是 Oracle JDK 版本 1.8.0_191。我在桌面上使用的 Java Mission Control 版本是 6.0.0。最后,我用来记录程序执行的命令如下:

java -XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+FlightRecorder -XX:StartFlightRecording=settings=profile,dumponexit=true,filename=test.jfr -classpath lib/*:src/ <my program with its arguments>

我还应该补充一点,直接使用 Java Mission Control 连接到服务器不是一个选项(或者是?),因为我正在使用 ssh 反弹来实际连接到它......

最佳答案

我自己进行的一些研究为我提供了答案。

JavaMonitorEnter 事件(以及人们想要监视的其他事件)需要在飞行记录器配置文件中指定。在这种情况下,我使用的是 profile 配置,它与 Oracle JDK 的 default 配置一起提供。

我使用 Java Mission Control 创建了自己的配置。 This blog非常有助于介绍如何找到在 Java Mission Control 中创建自定义录制配置的工具。

然后我导出我新创建的配置,将其上传到我的测试环境并在我的命令中指定此配置(仅在修改后的选项下方):

-XX:StartFlightRecording=settings=/home/<username>/Custom,<other options>...

我的问题到底是什么

阻塞记录在 Oracle JDK 提供的飞行记录器配置中激活。然而,要真正记录阻塞,它们需要持续超过特定阈值(default 配置中为 20ms,profile 配置中为 10ms)。

在我的应用程序中,单个阻塞短于此阈值,因此当我在 Java Mission Control 中打开我的记录时没有任何显示。

我的主要困惑来源是消息指出“Java 阻塞规则要求事件可用...”。对我的情况更准确的描述是没有记录超过配置阈值的阻塞

关于java - 使用 Java Flight Recorder 和 Java Mission Control 监控锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53475177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com