我有一个Java程序只能运行大约20-30秒,我想对其进行分析。
在每次启动时手动启动jvisualvm profiler并不可靠,因为您会浪费几秒钟来操作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
您需要从
jmc
目录运行$JAVA_HOME/bin
以打开创建的.jfr
文件。我发现它比VisualVM更难使用,但是产生的结果更加详细,噪音也更少。也就是说,您通过探查器本身得到的分配要少得多。