0

我目前有一些想要分析的 Java 代码。在阅读了一些关于它的有前途的东西后,我决定使用 Java Mission Control。但是,到目前为止,我咨询过的每个资源都告诉我首先启动我想要分析的进程,然后才在任务控制已经运行后“附加”或分析代码(例如来自 oracle 的这个视频:https ://youtu.be/WMEpRUgp9Y4?t=14m56s)。

有没有办法从一开始就进行分析?谢谢

4

3 回答 3

0

当您开始该过程时,有一种方法可以开始分析记录。

示例:运行 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

于 2017-07-17T06:59:25.147 回答
0

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退出时自动转储。

于 2018-06-16T22:44:11.887 回答
0

它没有很好的记录,但有可能。你需要使用这个 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
于 2017-07-17T07:01:00.107 回答