首页 > 其他分享 >GC日志详细解析,非常详细GC(20) Pause Young (Normal) (G1 Evacuation Pause)

GC日志详细解析,非常详细GC(20) Pause Young (Normal) (G1 Evacuation Pause)

时间:2024-09-11 22:53:59浏览次数:15  
标签:info Pause 20 GC 详细 gc 16636.766

在Java虚拟机(JVM)中,垃圾收集(GC)是内存管理的关键部分。分析GC日志可以帮助我们了解应用程序的内存使用情况和GC性能。以下是对一段GC日志的详细解析,涵盖了GC的不同阶段和相关信息。

GC日志示例
[16636.674s][info][gc,start     ] GC(20) Pause Young (Normal) (G1 Evacuation Pause)
[16636.674s][info][gc,task      ] GC(20) Using 4 workers of 4 for evacuation
[16636.766s][info][gc,phases    ] GC(20)   Pre Evacuate Collection Set: 1.6ms
[16636.766s][info][gc,phases    ] GC(20)   Evacuate Collection Set: 71.8ms
[16636.766s][info][gc,phases    ] GC(20)   Post Evacuate Collection Set: 17.7ms
[16636.766s][info][gc,phases    ] GC(20)   Other: 1.0ms
[16636.766s][info][gc,heap      ] GC(20) Eden regions: 594->0(593)
[16636.766s][info][gc,heap      ] GC(20) Survivor regions: 20->21(77)
[16636.766s][info][gc,heap      ] GC(20) Old regions: 66->66
[16636.766s][info][gc,heap      ] GC(20) Humongous regions: 33->33
[16636.766s][info][gc,metaspace ] GC(20) Metaspace: 122710K(126592K)->122710K(126592K) NonClass: 107922K(110336K)->107922K(110336K) Class: 14787K(16256K)->14787K(16256K)
[16636.766s][info][gc           ] GC(20) Pause Young (Normal) (G1 Evacuation Pause) 711M->118M(1024M) 92.186ms
[16636.766s][info][gc,cpu       ] GC(20) User=0.29s Sys=0.00s Real=0.09s
1. GC开始
[16636.674s][info][gc,start     ] GC(20) Pause Young (Normal) (G1 Evacuation Pause)
  • 时间戳: 16636.674秒
  • GC类型: GC(20) 指第20次GC
  • GC事件: Pause Young (Normal) (G1 Evacuation Pause)
    • Pause Young: 这是一个年轻代GC事件。
    • Normal: 表示这是一个正常的GC事件,而非紧急或其他类型。
    • G1 Evacuation Pause: G1 GC的回收暂停,主要是回收年轻代中的对象。
2. GC任务
[16636.674s][info][gc,task      ] GC(20) Using 4 workers of 4 for evacuation
  • 任务: GC(20) 使用了4个线程进行回收工作,这里有4个工作线程用于回收。
3. GC阶段
[16636.766s][info][gc,phases    ] GC(20)   Pre Evacuate Collection Set: 1.6ms
[16636.766s][info][gc,phases    ] GC(20)   Evacuate Collection Set: 71.8ms
[16636.766s][info][gc,phases    ] GC(20)   Post Evacuate Collection Set: 17.7ms
[16636.766s][info][gc,phases    ] GC(20)   Other: 1.0ms
  • Pre Evacuate Collection Set: 1.6ms
    • 在开始实际的回收之前,进行的一些准备工作阶段。
  • Evacuate Collection Set: 71.8ms
    • 实际的回收阶段,即将对象从Eden区域转移到Survivor区域或老年代。
  • Post Evacuate Collection Set: 17.7ms
    • 回收后的清理和整理阶段。
  • Other: 1.0ms
    • 其他时间开销,比如同步和处理任务。
4. 堆内存状态
[16636.766s][info][gc,heap      ] GC(20) Eden regions: 594->0(593)
[16636.766s][info][gc,heap      ] GC(20) Survivor regions: 20->21(77)
[16636.766s][info][gc,heap      ] GC(20) Old regions: 66->66
[16636.766s][info][gc,heap      ] GC(20) Humongous regions: 33->33
  • Eden regions: 594->0(593)

    • 594->0: Eden区域的数量从594减少到0,这表示所有Eden区域中的对象都已经被转移。
    • (593): 当前总共有593个Eden区域,说明有一个区域可能在这次GC中未被使用或预留。
  • Survivor regions: 20->21(77)

    • 20->21: Survivor区域的数量从20增加到21。这通常表示年轻代中的对象已经移动到Survivor区域。
    • (77): 当前总共有77个Survivor区域。
  • Old regions: 66->66

    • 66->66: 老年代区域的数量保持不变,说明老年代没有发生变化。
  • Humongous regions: 33->33

    • 33->33: Humongous区域的数量保持不变,说明没有大的对象被移动或回收。
5. 元空间(Metaspace)状态
[16636.766s][info][gc,metaspace ] GC(20) Metaspace: 122710K(126592K)->122710K(126592K) NonClass: 107922K(110336K)->107922K(110336K) Class: 14787K(16256K)->14787K(16256K)
  • Metaspace: 122710K(126592K)->122710K(126592K)
    • 122710K(126592K): Metaspace的使用量和最大容量保持不变。
  • NonClass: 107922K(110336K)->107922K(110336K)
    • 107922K(110336K): 非类数据的使用量和最大容量保持不变。
  • Class: 14787K(16256K)->14787K(16256K)
    • 14787K(16256K): 类数据的使用量和最大容量保持不变。
6. GC总览
[16636.766s][info][gc           ] GC(20) Pause Young (Normal) (G1 Evacuation Pause) 711M->118M(1024M) 92.186ms
  • Pause Young (Normal) (G1 Evacuation Pause): 同前文。
  • 711M->118M(1024M): GC前后年轻代的堆内存使用情况,711MB减少到118MB,总堆大小为1024MB。
  • 92.186ms: GC的总暂停时间,即GC完成所花费的时间。
7. CPU时间
[16636.766s][info][gc,cpu       ] GC(20) User=0.29s Sys=0.00s Real=0.09s
  • User: GC操作消耗的用户态CPU时间,0.29秒。
  • Sys: GC操作消耗的系统态CPU时间,0.00秒。
  • Real: GC操作的实际时间,0.09秒。实际时间比用户态和系统态CPU时间短,说明GC在处理时涉及的其他任务很少。
总结

这段GC日志详细记录了第20次垃圾收集的过程及其结果。主要关注点包括GC的各个阶段耗时、堆内存的变化情况、元空间的使用状态,以及GC的总暂停时间和CPU消耗。这些信息有助于识别内存管理问题、优化GC性能,并改进Java应用程序的运行效率。

通过对GC日志的深入分析,我们可以:

  1. 评估GC的性能,并确定是否需要调整JVM参数。
  2. 识别内存分配和回收的瓶颈,优化内存使用策略。
  3. 监控长时间运行中的GC模式和变化趋势,从而做出适当的优化调整。

标签:info,Pause,20,GC,详细,gc,16636.766
From: https://blog.csdn.net/weixin_43505211/article/details/142152436

相关文章