gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:14:23 25 4
gpt4 key购买 nike

我们的 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 (或您需要的值)以确保旧事件不会被刷新。

关于java - Java Flight Recorder 结果中的垃圾收集统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com