无法为在Windows10上作为服务运行的Java应用程序运行Continuous Flight Recorder

时间:2018-02-19 16:10:19

标签: java windows profiling jmc jfr

我正在尝试使用Java flight recorder dumponexit选项配置一个Java应用程序,该应用程序在Windows 10(64位)中作为服务运行。在执行期间,Windows会创建一个临时目录和临时.jfr文件。但是,最终的JFR文件不会在默认目录或用户定义的目录中创建。 使用的确切选项是-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true

这组选项在使用java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true -jar <AppName>

运行的任何Java应用程序上都能很好地工作

在另一种情况下,如果我使用具有定义持续时间的-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:\Windows\Temp\2018_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 :(得分:0)

我的第一个猜测是它与(文件)权限相关。运行Windows服务的用户可能与从shell启动Java进程时的用户不同。也就是说,当你设定一个持续时间时,你就能得到一个录音,所以理论不成立。

指定dumponexit = true时,转储在Java关闭挂钩中执行。如果进程未正确终止,即进程被强制终止,那么钩子永远不会有机会运行。

如果你能得到一个日志,我会尝试用-XX启动它:FlightRecorderOptions = loglevel = trace,看看你是否看到任何错误消息。