繁体   English   中英

Java Flight Recorder结果中的垃圾收集统计信息

[英]Garbage Collection statistics in Java Flight Recorder result

我们CI中有一项工作可以启动Java应用程序并运行一些测试(该测试充当该应用程序的客户端)。 该应用程序从我认为是进行连续飞行记录的正确JVM选项开始:

-XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -XX:+FlightRecorder -XX:FlightRecorderOptions=dumponexit=true,dumponexitpath=/tmp/application-flightRecorder.jfr -XX:StartFlightRecording=defaultrecording=true,settings=customSetting -XX:+DebugNonSafepoints

它可以很好地生成JFR文件,我可以在Java Mission Control中打开它。 除了上面的JVM选项,我们还可以选择启用GC日志记录:

-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintFlagsFinal -XX:+PrintHeapAtGC -XX:+PrintReferenceGC -XX:+PrintTenuringDistribution -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:+LogVMOutput -XX:LogFile=/tmp/application-safepoint.log -Xloggc:/tmp/application-gc.log

也可以。 将生成gc日志和安全点日志文件。 但是,我注意到任务控制中的GC统计信息并未列出应用生命周期内发生的所有GC。 例如,如果我使用GCViewer( https://github.com/chewiebug/GCViewer )打开gc日志,则会发生更多的GC。

我在这里错过了什么吗? 还是任务控制仅打印“重要” gc?

提前致谢!

JFR使用环形缓冲区,因此在某些时候会清除旧GC的事件,但您不应留有空隙。

我注意到您使用了自定义的JFC文件,可能是您已禁用了某些GC事件,例如,年轻收藏吗?

您可能要考虑将记录写入磁盘(disk = true)并设置maxage = 1h(或您需要的值),以确保不会清除旧事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM