【问题标题】:How to Analyze JVM Garbage Collection?如何分析 JVM 垃圾回收?
【发布时间】:2016-06-18 05:12:21
【问题描述】:

我的任务是分析垃圾收集。我已经为记录 GC 配置了服务器,并且统计信息已正确传递。现在我有了 GC 信息,我有一个关于调优的问题。将我的 GC 文件插入分析工具后,我发现没有 Full GC 只有次要 GC。这是个问题吗?
另外,如果您查看以下行...

[PSYoungGen: 454784K->14336K(450688K)] 685884K->258421K(1761408K), 8.6630322 secs] [Times: user=30.25 sys=1.20, real=8.66 secs]

这是否意味着……。

454784K->14336K = Usage of Young generation before and after collection 

在我看来,在收集之前比在收集之后有更多年轻的 GC。在这种情况下,我应该创建一个新比率吗?还是我在向后看?

685884K->258421K = Total used heap before and after collection

此外,我在运行 JMeter 测试后的最长时间是......

[Times: user=30.25 sys=1.20, real=8.66 secs]

我最少的时间是

[Times: user=0.73 sys=0.29, real=0.16 secs]

这是否意味着我需要专注于代码才能了解为什么该特定任务如此艰巨?也许这是一个线程/数据库问题?

我是否应该尝试让这些数字尽可能接近 454784K->14336K? 我需要 Full GC 吗?

有什么想法吗?

【问题讨论】:

    标签: java memory-leaks garbage-collection jvm


    【解决方案1】:

    这取决于你的目标是什么。您的 GC 时间会因许多因素而异,其中最重要的是

    • 已执行完整 GC。
    • 保留了年轻一代的数据量。

    恕我直言,提高性能的最佳方法是降低分配率。这将使您的代码在 GC 暂停之间更快,减少 GC 暂停的次数,并使您的应用程序更容易调优。我建议尝试使用 Flight Recorder 来监控您的内存分配。

    【讨论】:

    • 谢谢彼得。我会考虑降低分配率。因为我在日志中没有看到任何 Full GC,所以说没有执行 Full GC 是否安全。只有 PSYoungGen。或者,Full GC 可能需要一两天时间才能显示在日志中?
    • @Angular_Newbie 完整的 GC 通常发生在永久空间填满时。这需要多长时间取决于您的应用程序和配置。可能是几秒钟或几天。您可以使用jstat -gccause {pid} 10s 查看 GC 区域,以便查看每个区域的填充情况以及发生 GC 的时间以及原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多