我正在尝试使用 Java 飞行记录器 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
最佳答案
我的第一个猜测是它与(文件)权限相关。运行 Windows 服务的用户可能与从 shell 启动 Java 进程时的用户不同。也就是说,当您设置持续时间时,您就能够获得录音,因此该理论不成立。
当您指定 dumponexit=true 时,转储将在 Java 关闭 Hook 中执行。如果进程没有正确终止,即进程被强行终止,则钩子(Hook)将永远没有机会运行。
如果您可以获得日志,我会尝试使用 -XX:FlightRecorderOptions=loglevel=trace 启动它,看看您是否看到任何错误消息。
关于java - 无法在 Windows 10 上运行作为服务运行的 Java 应用程序的 Continuous Flight Recorder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48869967/