我目前有一些想要分析的 Java 代码。在阅读了一些关于它的有前途的东西后,我决定使用 Java Mission Control。但是,到目前为止,我咨询过的每个资源都告诉我首先启动我想要分析的进程,然后才在任务控制已经运行后“附加”或分析代码(例如来自 oracle 的这个视频:https ://youtu.be/WMEpRUgp9Y4?t=14m56s)。
有没有办法从一开始就进行分析?谢谢
我目前有一些想要分析的 Java 代码。在阅读了一些关于它的有前途的东西后,我决定使用 Java Mission Control。但是,到目前为止,我咨询过的每个资源都告诉我首先启动我想要分析的进程,然后才在任务控制已经运行后“附加”或分析代码(例如来自 oracle 的这个视频:https ://youtu.be/WMEpRUgp9Y4?t=14m56s)。
有没有办法从一开始就进行分析?谢谢
当您开始该过程时,有一种方法可以开始分析记录。
示例:运行 10 分钟的分析记录。
java -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=10m,name=Test,filename=recording.jfr,settings=profile -jar target/highcpu-0.0.1.jar
有关详细信息,请参阅我的文章:使用 Java Flight Recorder
JDK 11:
-XX:StartFlightRecording
JDK 9、JDK 10:
-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording
JDK 8u40,
-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording=name=whatever
JDK 7u4、JDK 8u20:
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:StartFlightRecording=name=whatever
如果你想避免一起附加到进程,你可以指定一个文件名,即-XX:StartFlightRecording=filename=rec.jfr,然后通过设置一个持续时间,即持续时间=60s,或者在一段时间后转储记录,或者如果您只希望它在 JVM 退出时发生:
-XX:StartFlightRecording=
filename=rec.jfr,dumponexit=true
您可以在 JMC 中打开然后打开录制文件。在 JDK 11 中,这已被进一步简化,因此您只需指定:
-XX:StartFlightRecording:filename=c:\recs
并且文件名将在指定目录中生成,并在JVM退出时自动转储。
它没有很好的记录,但有可能。你需要使用这个 jvm 选项
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=
前两个是强制性的,而最后一个需要配置各种参数,您可以在此处找到解释。理解每个参数的含义并不简单,但是通过一些试验和错误,您可以很容易地找到一组好的选项。
正如参考一样,这是一个最小的功能配置:
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,maxage=6h,settings=default MyApp