如何理解Full GC日志?

时间:2012-11-15 13:00:27

标签: java garbage-collection

我目前在PROD中看到以下内容:

5429.779: [Full GC [PSYoungGen: 13809K->0K(505216K)] [PSOldGen: 253802K->245481K(319488K)] 267612K->245481K(824704K) [PSPermGen: 70059K->70059K(118784K)], 0.5869143 secs] [Times: user=0.59 sys=0.00, real=0.59 secs]

据我所知,A-> B(C)表示:A,在gc之前,B之后是gc,C堆没有终身和烫发

我不理解的是片段(在所有[] s之外)267612K->245481K(824704K)。它指的是什么?

3 个答案:

答案 0 :(得分:4)

我建议您使用工具而不是手动阅读日志。

试用HPJmeter工具

我发现这个工具最好。休息那里有很多工具。请参阅:Know of any Java garbage collection log analysis tools?

一般来说,根据我的经验,使用上面的工具总是更好,这些工具只是导入GC日志文件&给出了不同世代的详细图表。如果你去手工阅读,那么你的阅读时间将比阅读能力分析更多。

答案 1 :(得分:3)

它是世代的总和,意味着实际内存中的堆使用率和总堆大小的总和(以大括号显示)。

在给定的示例中,[PSYoungGen: 13809K->0K(505216K)] [PSOldGen: 253802K->245481K(319488K)] 267612K->245481K(824704K)

13809K + 253802K = 267612K

0K + 245481K = 245481K

505216K + 319488K = 824704K

答案 2 :(得分:0)

完整GC是垃圾收集过程中的重要事件。在此完整的GC阶段,将从JVM堆中的所有区域(Young,Old,Perm,Metaspace)收集垃圾。完全GC趋于从内存中逐出更多对象,因为它遍历了所有世代。完整GC事件包含多个阶段。 Full GC事件的某些阶段(例如“初始标记”,“注释”,“清理”等)会暂停所有正在运行JVM的应用程序线程。在此期间,不会处理任何客户交易。 JVM将使用所有CPU周期来执行垃圾回收。因此,CPU消耗将非常高。因此,通常不需要完整的GC。不用问连续完整GC的必要性。连续的完整GC将导致以下问题:

1.CPU消耗将急剧增加。 2.由于JVM已暂停,因此应用程序事务的响应时间将缩短。因此,它将影响您的SLA,并导致不良的客户体验。

enter image description here    GCeasy工具生成的堆图–显示连续的完整GC

What is Consecutive full GCs?