一次JVM GC长暂停的排查过程

作者 : 开心源码 本文共450个字,预计阅读时间需要2分钟 发布时间: 2022-05-11 共82人阅读

现象

通过CAT埋点,发现在35~36分钟时候,出现JVM的GC耗时异常

通过跳板机登录机器,找到GC日志进行查看,如下图

在显示的最后一行中,我们看到其中user=0,sys=0,real=4.31s,表示JVM经历了长达4s多的STW,也即在这段时间内,该机器是无法对外提供服务的,请求到达该机器,最终只可以超时返回。

排查

根据经验,这种 real > user + sys 的情况,大概率是内存的swap和密集型的IO造成的,能顺着这个思路进行排查,这时候就突显了系统监控的重要性了,通过查看IO监控

我们能发现,在对应的时间上的确存在大量的IO操作。

为什么频繁IO会引起长时间GC

在发生GC时,需要把相关数据写入GC日志,在写入期间,由于write()系统调使用导致了暂停。这种日志的写操作,即便在异步、缓存IO或者非阻塞IO模式下,还是有可可以由于系统机制(比方页面缓存的回写),导致长时间的阻塞。

如何减轻由于IO造成的影响?

能将Java日志文件移动到一个单独的或者高性可以的磁盘驱动器(例如SSD, tmpfs)

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 一次JVM GC长暂停的排查过程

发表回复