有一次线上GC耗时过长报警了,一看GC日志,YGC偶尔会耗时过长,有个别YGC耗时甚至超过了9s,一看更详细的日志,发现Object Copy花了9s多,如下图:
这段的意思是这样的:
意思是复制存活对象耗时过长,而剩余可扩展的堆内存还很多,显然不是内存不足造成的。正好有同事在排查swap分区相关的问题,就看了下线上的swap空间使用情况,发现线上的应用使用了太多swap空间,这样子的话确实会影响内存复制的速度。那为什么会使用到swap空间呢?看了下相关资料,提到了一个linux内核参数swappiness,假设这个值为a,那么当已使用的物理内存高于(100-a)%时,就会开始使用swap分区。我们在终端上执行【cat /proc/sys/vm/swappiness】发现打印出来的值是60,也就是说,当物理内存使用率高于40%时,就会使用swap分区了。
于是乎,找运维改了下这个参数,调小成了30,后来就再也没报警了。
原文:https://www.cnblogs.com/ZeldaBreath/p/14635032.html