2

我正在尝试使用 JMC 在我的服务器程序中找到问题方法。当我在本地(在 Windows 上)运行服务器并从 JMC 启动 Flight Recorder 时 - 一切正常。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

settings_for_jmc.jfc我使用从 JMC 导出的Oracle JDK 8u40 设置文件。它包含 execution_sample 设置

<event path="vm/prof/execution_sample">
  <setting name="enabled">true</setting>
  <setting name="period">10 ms</setting>
</event>

清空热方法窗口

是否可以选择记录或不记录此类数据?我错过了什么?

4

1 回答 1

0

如果您不指定自定义设置文件,它是否有效?

如果是这样,则问题很可能出在您的 .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>

如果没有,它可能是一个错误。信号量在 Linux 上不使用 CLOCK_REALTIME 存在问题,这可能会大幅减少样本数量。它已在 7u80 和 8u25 中修复。

要打印当前使用的事件设置,请执行以下操作:

jcmd <pid> JFR.check verbose=true

如果启用了 vm/prof/execution_sample,则问题出在 JVM 和采样器上。否则,很可能在配置中。

采样器仅在采样方法运行 Java 代码时创建事件,因此如果您的应用程序以原生方式旋转,则不会有任何示例。

于 2016-07-20T01:39:45.610 回答