我想做的事
我有一个我正在尝试改进的 Java 程序。我怀疑代码中的同步块会损害性能,但我想在接触我的代码之前确保这是我的问题。
我是怎么做的
为了检查同步块是否确实存在问题,我使用 Flight Recorder 在测试服务器上记录了我的程序的执行,jfr
在我的桌面上下载了创建的文件并使用 Java Mission Control 打开它。但是Lock Instances
页面中Java Application
没有显示任何内容。我得到的唯一线索是结果视图中的一条消息,内容如下:
Java 阻止规则要求事件可从以下事件类型中获得:com.oracle.jdk.JavaMonitorEnter
因此,我假设必须与飞行记录器一起激活某种选项,但到目前为止我无法找到它。
我的问题
如何启用com.oracle.jdk.JavaMonitorEnter
Java Flight Recorder 记录类型中的事件?
或者我遗漏了其他东西,有更好的方法来确定在 Java 程序中对同步块进行了多少阻塞?
我的环境
我正在使用 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 反弹来实际连接到它......