java.lang.OutOfMemoryError:GC overhead limit exceeded
Posted on 2020-05-14 08:46 和风细雨汪汪 阅读(1422) 评论(0) 编辑 收藏 举报情景:线上服务突然宕机,检查日志发现只有这个异常会导致。
分析:线上没有死循环程序,不知道什么原因造成GC问题,最后解决办法是增大了服务的运行内存
第二天分析gc的原因
异常对性能不利。抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。
‘GC overhead limit exceeded’官方解释:‘并行/并发回收器在GC回收时间过长时会抛出OutOfMemroyError。过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存。用来避免内存过小造成应用不能正常工作。’
应该是程序异常太多,不停触发GC的预测策略,加速了OOM的出现。
下面这篇博文可做参考:https://blog.csdn.net/casablancaagnes_3sdf/article/details/52299100
善于将复杂问题简单化