随笔 - 138  文章 - 0  评论 - 8  阅读 - 37万

OutOfMemoryError:GC overhead limit exceeded

今天上线系统后,发现java进程疯狂占用CPU资源,达到百分之六、七百,直接导致服务无法响应请求。但是查看mysql的服务,并没有出现死锁的情况,推测是Java代码里面有问题。
过了一段时间就爆出GC overhead limit exceeded的错误,也就是说程序耗尽了所有可用的内存,GC也清理不了
默认情况下, 如果GC花费的时间超过 98%, 并且GC回收的内存少于 2%, JVM就会抛出这个错误。

注意, java.lang.OutOfMemoryError: GC overhead limit exceeded 错误只在连续多次 GC 都只回收了不到2%的极端情况下才会抛出。假如不抛出 GC overhead limit 错误会发生什么情况呢? 那就是GC清理的这么点内存很快会再次填满, 迫使GC再次执行. 这样就形成恶性循环, CPU使用率一直是100%, 而GC却没有任何成果. 系统用户就会看到系统卡死 - 以前只需要几毫秒的操作, 现在需要好几分钟才能完成。

posted on   Mrnx  阅读(739)  评论(0编辑  收藏  举报
努力加载评论中...
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示