[英]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.