如何从头到尾分析一个 Java 程序 运行?
How to profile a Java program run from start to finish?
我有一个只运行大约 20-30 秒的 Java 程序,我想分析它。
每次启动时手动启动 jvisualvm 探查器是不可靠的,因为您在操作 UI.
时会损失几秒钟
有没有办法分析整个执行过程,就像旧的 -Xhprof:cpu=samples
不再有效?
使用 Flight Recorder 可以添加到命令行
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile
https://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/run.htm#JFRRT176
它只记录新TLAB上的内存分配,所以我让它比默认值小很多以获得更多样本。
-XX:TLABSize=128k
您需要从 $JAVA_HOME/bin
目录 运行 jmc
打开创建的 .jfr
文件。
我发现它比 VisualVM 更难使用,但产生的结果更详细,噪音更小。也就是说,分析器本身导致的分配要少得多。
我有一个只运行大约 20-30 秒的 Java 程序,我想分析它。
每次启动时手动启动 jvisualvm 探查器是不可靠的,因为您在操作 UI.
时会损失几秒钟有没有办法分析整个执行过程,就像旧的 -Xhprof:cpu=samples
不再有效?
使用 Flight Recorder 可以添加到命令行
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile
https://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/run.htm#JFRRT176
它只记录新TLAB上的内存分配,所以我让它比默认值小很多以获得更多样本。
-XX:TLABSize=128k
您需要从 $JAVA_HOME/bin
目录 运行 jmc
打开创建的 .jfr
文件。
我发现它比 VisualVM 更难使用,但产生的结果更详细,噪音更小。也就是说,分析器本身导致的分配要少得多。