一次JVM GC长暂停的排查过程
现象
通过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)
原文地址:https://www.jianshu.com/p/8a4366a7f32d
相关推荐
-
java容器-list的常用实现及原理 Java基础
2020-6-13
-
Go语言下载网络图片或文件 Java基础
2019-9-11
-
Java底层-GitHub干货排行,敲黑板! Java基础
2019-8-22
-
有时在面试时,我都替候选人着急——候选人完全可以在面试前准备 Java基础
2019-6-3
-
为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点? Java基础
2019-9-9
-
一个自己研究出来的字符串匹配算法-k子串算法 Java基础
2019-5-13
-
干货系列之java注解 Java基础
2020-6-13
-
手算平方根和基于 Java BigInteger 的大整数平方根的实现 Java基础
2019-9-7
-
以图搜图系统概述及工程实践(上) Java基础
2020-7-2
-
多文件上传和下载:以16进制字符串的形式传输 Java基础
2019-3-23