在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日志的深入分析,我们可以:
- 评估GC的性能,并确定是否需要调解JVM参数。
- 识别内存分配和回收的瓶颈,优化内存使用计谋。
- 监控长时间运行中的GC模式和变革趋势,从而做出适当的优化调解。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |