HeapDump性能社区Young GC异常问题排查实战案例精选合集

简介: HeapDump性能社区Young GC异常问题排查实战案例精选合集

在高并发下,Java程序的非正常GC带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务超时,引发性能问题。本期小编为大家筛选了4篇Young GC问题排查文章,帮大家复习YGC的执行原理和问题排查要点。


1.YGC问题排查,又让我涨姿势了!


作者:Rockets


https://heapdump.cn/article/1...


本文作者分享了一个棘手的Young GC耗时过长的线上案例,首先是收到服务超时告警,发现了YoungGC耗时过长的问题,然后就开始排查。发现问题后的处理堪称教科书般的操作:“按照GC问题的常规排查流程,我们立刻摘掉了一个节点,然后通过以下命令dump了堆内存文件用来保留现场。jmap -dump:format=b,file=heap pid

最后对线上服务做了回滚处理,回滚后服务立马恢复了正常,接下来就是长达1天的问题排查和修复过程。”


经过确认JVM配置——检查代码——对dump的堆内存文件进行分析——分析YGC处理Reference的耗时——再回到长周期对象进行分析,找出了问题所在:每次调用getConfig方法时都会往List中添加元素,并且未做去重处理,然后立即解决了问题。


文末对YGC相关知识点进行了梳理和总结,从新生代的相关知识讲起,带大家复习了YGC的触发时机和执行过程。


本文是一篇理论与实战结合的经典好文,作者不仅分享了自己遇到YGC问题的排查思路,还就此知识点帮大家复习了原理。读者今后遇到类似的问题可以参考快速分析解决。


2.频繁操作本地缓存导致YGC耗时过长


作者:阿菜


https://heapdump.cn/article/1...


本文作者在帮群友排查YGC耗时过长问题,通过分析堆栈和GC log发现,在某次YGC时,Survivor区中年龄超过7的对象占用了Survivor空间一半以上。而正常情况下,年轻代对象朝生夕死。网络服务处理请求为毫秒级,YGC几秒甚至十几秒才发生一次,多数年轻对象活不过1代。于是,猜测该群友使用了本地缓存。进一步沟通后得出结论:原因一:年轻代中有太多存活的对象,增加了标记时间;原因二:YGC又需要花费大量的时间在扫描Card Table上,总结原因是操作本地缓存太频繁导致了YGC耗时过长。最后向群友提出了修改意见解决了问题。


在文章结尾作者还总结了该业务场景的几条修改建议,很有参考价值。


3.我司基础组件更新本地缓存策略问题导致young gc时间升高


作者:朱纪兵


https://heapdump.cn/article/1...


本文作者在一次研究服务QPS和young gc的时间的关系时,发现实际情况与理想状态不同,于是开始追踪问题。用gdb 去dump了下来survivor区域中的内容,发现了异常点。最后发现是公司配置中心基础组件更新本地缓存策略的问题。


作者遇到问题不忽视主动排查反复验证的精神值得学习。


4.耗时20多秒的young gc,你见过吗?


作者:Edenbaby


https://heapdump.cn/article/1...


作者遇到了耗时20多秒的young gc,在排查时发现user(用户耗时)+sys(系统耗时) <real(真实耗时),但大多数的young GC中,real time是小于sys+user time的,因为paralle垃圾回收器是多线程并发的去GC,所以user time是各个线程累积的一个时间,大概率要大于real time。因此猜测是CPU不够用或磁盘IO压力大导致的。


排查YGC异常问题,一定要掌握GC执行过程,会看GC log,从日志中找到突破点。


更多性能文章,请访问 https://heapdump.cn/
相关文章
|
4月前
|
Arthas 监控 Java
(十一)JVM成神路之性能调优篇:GC调优、Arthas工具详解及各场景下线上最佳配置推荐
“在当前的互联网开发模式下,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代开发过程中炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题”。
366 3
|
5月前
|
监控 Java 调度
探秘Java虚拟机(JVM)性能调优:技术要点与实战策略
【6月更文挑战第30天】**探索JVM性能调优:**关注堆内存配置(Xms, Xmx, XX:NewRatio, XX:SurvivorRatio),选择适合的垃圾收集器(如Parallel, CMS, G1),利用jstat, jmap等工具诊断,解决Full GC问题,实战中结合MAT分析内存泄露。调优是平衡内存占用、延迟和吞吐量的艺术,借助VisualVM等工具提升系统在高负载下的稳定性与效率。
99 1
|
19天前
|
Java
JVM进阶调优系列(5)CMS回收器通俗演义一文讲透FullGC
本文介绍了JVM中CMS垃圾回收器对Full GC的优化,包括Stop the world的影响、Full GC触发条件、GC过程的四个阶段(初始标记、并发标记、重新标记、并发清理)及并发清理期间的Concurrent mode failure处理,并简述了GC roots的概念及其在GC中的作用。
|
3月前
|
运维 监控 Java
【JVM 调优秘籍】实战指南:JVM 调优参数全解析,让 Java 应用程序性能飙升!
【8月更文挑战第24天】本文通过一个大型在线零售平台的例子,深入探讨了Java虚拟机(JVM)性能调优的关键技术。面对应用响应延迟的问题,文章详细介绍了几种常用的JVM参数调整策略,包括堆内存大小、年轻代配置、垃圾回收器的选择及日志记录等。通过具体实践(如设置`-Xms`, `-Xmx`, `-XX:NewRatio`, `-XX:+UseParallelGC`等),成功降低了高峰期的响应时间,提高了系统的整体性能与稳定性。案例展示了合理配置JVM参数的重要性及其对解决实际问题的有效性。
94 0
|
5月前
|
存储 缓存 监控
深入JVM:解析OOM的三大场景,原因及实战解决方案
深入JVM:解析OOM的三大场景,原因及实战解决方案
|
6月前
|
监控 算法 Java
JVM问题排查宝典
本文介绍了JVM问题排查与学习的经验,包括使用VisualVM监控本地JVM、通过GCViewer和gceasy分析GC日志、使用MAT分析OOM以及查询官方JVM参数。还提到了一个第三方网站HeapDump,提供简化版的JVM参数分析和生成服务,以快速生成适合特定环境的JVM配置。此外,推荐了几本深入学习JVM的书籍,并提供了进一步学习JVM问题的资源。
78 1
|
6月前
|
Arthas 监控 Java
JVM工作原理与实战(三十一):诊断内存泄漏的原因
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了诊断内存溢出的原因、MAT内存泄漏检测的原理等内容。
132 0
|
负载均衡 监控 算法
p7付费课程笔记5:串行gc以及并行gc
前段时间我们学习jvm的基础结构和gc相关的基础知识,今天我们详细讲讲几大gc。
|
6月前
|
传感器 缓存 监控
「译文」Java 垃圾收集参考手册(十一):GC 调优实战篇
「译文」Java 垃圾收集参考手册(十一):GC 调优实战篇
|
6月前
|
算法 Java
jvm性能调优实战 - 41JVM运行原理和GC原理Review
jvm性能调优实战 - 41JVM运行原理和GC原理Review
76 0