2

JMC を使用してサーバー プログラムで問題のあるメソッドを見つけようとしています。サーバーをローカルで (Windows 上で) 実行し、JMC から Flight Recorder を起動すると、すべて正常に動作します。JMC はCode、Hot Methods、Call Tree などのタブにデータを適切に表示しますが、(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.jfcJMC からエクスポートした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 に答える