/ / Windows10でサービスとして実行されているJavaアプリのContinuous Flight Recorderを実行できません-java、windows、profiling、jmc、jfr

Windows10上でサービスとして実行されているJavaアプリケーションの継続フライトレコーダーを実行できません - java、windows、profiling、jmc、jfr

Javaフライトレコーダーを使用してWindows 10(64ビット)でサービスとして実行されているJavaアプリケーションのプロファイルを作成しようとしています。 dumponexit オプション。 実行中に、Windowsは一時ディレクトリと一時.jfrファイルを作成します。ただし、最終的なJFRファイルはデフォルトディレクトリまたはユーザー定義ディレクトリに作成されません。 使用される正確なオプションは -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true.

このオプションのセットは、次を使用して実行されるJavaアプリケーションで完全に機能します。 java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true -jar <AppName>.

別のケースでは、私が使用する場合 -XX:StartFlightRecording 期間が定義されたオプションを選択すると、Java Flight Recorderは指定されたディレクトリに期待どおりにファイルを作成します。使用される正確なオプションは -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=delay=20s,duration=60s,name=MyRecording,filename=C:myrecording.jfr

私の要件は、前者を使用する必要があると言っていますプロファイリングのオプション。つまり、上記のWindowsサービスが開始されるたびにプロファイリングが有効になり、サービスが停止するたびにプロファイリングが停止して.jfrファイルが生成されます。

誰もが連続記録を使用してこの問題を解決した場合、ソリューションは大歓迎です。

更新: ログレベルをトレースに設定すると、次のログが生成されます。 使用されるオプション: -XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,dumponexitpath=C:,loglevel=trace

[2018-02-20 10:36:23] [info]  [ 1252] Commons Daemon procrun (1.0.15.0 64-bit) started
[2018-02-20 10:36:23] [info]  [ 1252] Running "XYZ" Service...
[2018-02-20 10:36:23] [info]  [ 6292] Starting service...
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][INFO ][0.000]
[2018-02-20 10:36:23] [info]  [ 7944] JFR log level set. Log level now at [TRACE]
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.163]
[2018-02-20 10:36:23] [info]  [ 7944] Loaded JFR library
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][INFO ][0.191]
[2018-02-20 10:36:23] [info]  [ 7944] Using C:WindowsTemp2018_02_20_10_36_23_12304 as Flight Recorder repository.
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.216]
[2018-02-20 10:36:23] [info]  [ 7944] Default settings loaded.
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.218]
[2018-02-20 10:36:23] [info]  [ 7944] Shutdown hook registered
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.224]
[2018-02-20 10:36:23] [info]  [ 7944] VMJFR created.
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.272]
[2018-02-20 10:36:23] [info]  [ 7944] RedefineClass successful
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.274]
[2018-02-20 10:36:23] [info]  [ 7944] RedefineClass successful
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.277]
[2018-02-20 10:36:23] [info]  [ 7944] RedefineClass successful
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.288]
[2018-02-20 10:36:23] [info]  [ 7944] Java started. Took 127 ms
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.290]
[2018-02-20 10:36:23] [info]  [ 7944] Starting up default recording
[2018-02-20 10:36:23] [info]  [13316] [jfr][DEBUG][0.292]
[2018-02-20 10:36:23] [info]  [13316] Bufferthread started.
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][INFO ][0.427]
[2018-02-20 10:36:23] [info]  [ 7944] Starting recording [id=0, name=HotSpot default, start=Tue Feb 20 10:36:23 GMT 2018]
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.429]
[2018-02-20 10:36:23] [info]  [ 7944] Binding recording [id=0, name=HotSpot default, start=Tue Feb 20 10:36:23 GMT 2018]
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.431]
[2018-02-20 10:36:23] [info]  [ 7944] Default recording started
[2018-02-20 10:36:23] [info]  [ 7944] [jfr][TRACE][0.433]
[2018-02-20 10:36:23] [info]  [ 7944] Finished starting default recording
[2018-02-20 10:36:25] [info]  [ 6292] Service started in 1799 ms.
[2018-02-20 10:37:40] [info]  [ 9208] Stopping service...
[2018-02-20 10:37:42] [info]  [ 9208] Service stop thread completed.
[2018-02-20 10:38:42] [info]  [ 1252] Run service finished.
[2018-02-20 10:38:42] [info]  [ 1252] Commons Daemon procrun finished

回答:

回答№1は0

私の最初の推測は、(ファイル)許可関連。 Windowsサービスを実行しているユーザーは、おそらくシェルからJavaプロセスを開始するときと同じではありません。とは言っても、期間を設定すると記録を取得できたので、その理論は成り立たない。

dumponexit = trueを指定すると、ダンプはJavaシャットダウンフックで実行されます。プロセスが適切に終了しない場合、つまりプロセスが強制的に強制終了された場合、フックは実行される機会を得ることができません。

ログを取得できる場合は、-XX:FlightRecorderOptions = loglevel = traceでログを開始し、エラーメッセージが表示されるかどうかを確認します。