我想要做什么
我有一个Java程序,正在尝试改进它。我怀疑代码中的同步块会影响性能,但在修改代码之前,我想确保这是我的问题。
我如何处理它
为了检查同步块是否是问题,我使用Flight Recorder在测试服务器上记录了程序的执行情况,将创建的文件下载到桌面,并使用Java Mission Control打开它。然而,在“Java Application”中,“Lock Instances”页面没有显示任何内容。我得到的唯一线索是结果视图中的一条消息:
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程序中同步块的阻塞程度?
我的环境
我正在使用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 rebound来实际连接到它...
我还应该补充一点,直接使用Java Mission Control连接服务器不是一个选择(或者说可能吗?)因为我正在使用SSH反弹来实际连接到它...