我正在尝试用JMC在我的服务器程序中寻找有问题的方法。当我在本地运行服务器(在Windows上)并从JMC启动飞行记录器时-一切正常。JMC可以正确地在Code标签中显示数据:热方法、调用树等,但是当我尝试分析远程平台上的服务器时(在Linux上),我得到了空窗口。要在平台上启动JFR,我使用以下命令:
/opt/java/java8/bin/jcmd 38390 VM.unlock_commercial_features
/opt/java/java8/bin/jcmd 38390 JFR.start duration=10m compress=true filename=dxstress3_cross_try1.jfr settings=/opt/dxstress/settings_for_jmc.jfc我使用从JMC导出的OracleJDK8u40Settings文件settings_for_jmc.jfc。它包含execution_sample设置
<event path="vm/prof/execution_sample">
<setting name="enabled">true</setting>
<setting name="period">10 ms</setting>
</event>

有记录或不记录此类数据的选项吗?我错过了什么?
发布于 2016-07-20 09:39:46
如果不指定自定义设置文件,它会起作用吗?
如果是这样,那么问题很可能出在您的.jfc文件中。在JDK 7/8上应该是这样的
<event path="vm/prof/execution_sample">
<setting name="enabled" control="method-sampling-enabled">true</setting>
<setting name="period" control="method-sampling-interval">10 ms</setting>
</event>如果不是,这可能是一个bug。在Linux上,信号量没有使用CLOCK_REALTIME存在一个问题,这可能会极大地减少样本数量。在7u80和8u25中进行了修复。
要打印当前使用的事件设置,请执行以下操作:
jcmd <pid> JFR.check verbose=true如果启用了vm/prof/execution,则问题出在JVM和采样器上。否则,它很可能在配置中。
采样器仅在采样方法运行Java代码时才会创建事件,因此如果您的应用程序在本机中旋转,则不会有示例。
https://stackoverflow.com/questions/38459777
复制相似问题