现象:

由于需要将mysql表中的过期数据在凌晨定时读取出过滤后转入到MongoDB,一个转换SQL达到百行,而且有几十个,集中运行后程序反馈异常:

Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded

Heap内存:1.5G,程序在Docker容器限制使用内存2G。

监控到内存GC变化:

Heap内存占用骤升至1.2G,然后不停的进行FullGC,而且间隔非常短,从下图中可以看出PermGen稳定,这也表明读取的数据由于太大是直接进入了老年代内存。

这时候CPU也彪升接近100%

请求访问时长也加长,异常反馈。

java.lang.OutOfMemoryError: GC overhead limit exceeded 这种情况发生的原因是程序基本上耗尽了所有的可用内存, GC 也清理不了。

更准确的说法应该是:执行垃圾收集的时间比例太大,有效的运算量太小。默认情况下,如果GC花费的时间超过 98%,并且GC 回收的内存少于 2%,JVM 就会抛出这个错误。

网友的解决建议:

有的人在解决 “java.lang.OutOfMemoryError: GC overhead limit exceeded” 错误时,配置了下面的启动参数:

// 不推荐

-XX:-UseGCOverheadLimit

我告诉你,这是一种完全错误的做法。因为 UseGCOverheadLimit 这样使用并不能真正地解决问题,只能推迟一点 out of memory 错误发生的时间,到最后还得进行其他处理。指定这个选项,会将原来的 java.lang.OutOfMemoryError: GC overhead limit exceeded 错误掩盖,变成更常见的 java.lang.OutOfMemoryError: Java heap space 错误消息。

有时候触发 GC overhead limit 错误的原因, 是因为分配给JVM的堆内存不足。这种情况下只需要增加堆内存大小即可。

在大多数情况下, 增加堆内存并不能解决问题。例如程序中存在内存泄漏, 增加堆内存只能推迟产生 java.lang.OutOfMemoryError: Java heap space 错误的时间。

所以,要想从根本上解决问题,则需要排查内存分配相关的代码。简单来说,需要搞清楚一下两点:

  • 哪类对象占用了最多内存?
  • 这些对象是在哪部分代码中分配的?

一次OutOfMemoryError: GC overhead limit exceeded相关推荐

  1. OutOfMemoryError: GC Overhead Limit Exceeded错误处理

    OutOfMemoryError: GC Overhead Limit Exceeded错误处理 最近线上遇到一个问题,服务日志正常打印,但是接口调不通,重启服务后正常. 为了找到问题所在,那就翻日志 ...

  2. java.lang.OutOfMemoryError: GC overhead limit exceeded

    今天现场weblogic报java.lang.OutOfMemoryError: GC overhead limit exceeded,在metalink查了下,有明白解释,要设置一个JVM參数.只是 ...

  3. idea启动java服务报错OutOfMemoryError: GC overhead limit exceeded解决方法

    在用idea开发java项目时,启动报内存溢出错误,致服务启动失败: Error:java: java.lang.OutOfMemoryError: GC overhead limit exceede ...

  4. What means the error-message 'java.lang.OutOfMemoryError: GC overhead limit exceeded' in Java?

    转国内的: 一.异常如下:Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exce ...

  5. Spark读取HDFS上的Snappy压缩文件所导致的内存溢出问题 java.lang.OutOfMemoryError: GC overhead limit exceeded

    报错java.lang.OutOfMemoryError: GC overhead limit exceeded HDFS上有一些每天增长的文件,使用Snappy压缩,突然某天OOM了 1.原因: 因 ...

  6. java gc error_java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案

    最近一个上线运行良好的项目出现用户无法登录或者执行某个操作时,有卡顿现象.查看了日志,出现了大量的java.lang.OutOfMemoryError: GC overhead limit excee ...

  7. 【jvm】java jvm 报错 OutOfMemoryError: GC overhead limit exceeded

    1.概述 JVM 抛出 OutOfMemoryError 的最后一种情况是 JVM 认为在执行 GC 上花费了太多时间: Exception in thread "main" ja ...

  8. 17 记一次 spark 读取大数据表 OOM OutOfMemoryError: GC overhead limit exceeded

    前言 // 呵呵 一天的车, 这就是过年吧!, 但是你还能看到 那一盏为你留的灯, 这可能就是羁绊吧 // 草稿箱 抽一波 呵呵 最近因为一次 测试造了一张 200w 数据记录的表 然后 业务上需要分 ...

  9. java.lang.OutOfMemoryError: GC overhead limit exceeded解决办法

    原文地址为: java.lang.OutOfMemoryError: GC overhead limit exceeded解决办法 java.lang.OutOfMemoryError: GC ove ...

最新文章

  1. 从json到抽取关键词
  2. c语言 内存搜索,怎么在一段内存中搜索一个十六进制串
  3. 生成1~n的全排列,按字典序输出
  4. mysql bin log日志
  5. react 添加less预处理语言
  6. 《孙子兵法》【火攻第十二】
  7. 函数式编程与命令式编程的学习难度比较
  8. spark-submit(spark版本2.3.2)
  9. keras遥感图像Unet语义分割(支持多波段多类)
  10. vbs教程《变量使用》
  11. js自己总结的小东西(打印出来方便学习)
  12. Power BI数据网关
  13. secureCRT注册码
  14. FineReport制作报表讲解(基本操作以及网络报表)
  15. 锐度、对比度、和清晰度的区别
  16. 段错误(核心已转储)错误及解决过程
  17. 坚持学英语 -- 公司前台MM 一日英语小记
  18. 《雪中悍刀行》读后感
  19. 如何扩展计算机c盘的控件,如何无损扩展C盘空间大小,这一招足够!
  20. 【CF917E】Upside Down(哈希二分)(后缀数组)(AC自动机)

热门文章

  1. vba读取csv文件到excel_利用VBA打开顺序文件,并读取
  2. java整形怎么转字符串型_java整型与字符串互转
  3. Java基础day11
  4. 工业用微型计算机(23)-汇编语言基本结构
  5. 机器学习小抄.pdf(像背托福单词一样理解机器学习)
  6. 【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec
  7. 【CV】使用Keras和迁移学习从人脸图像中预测体重指数BMI
  8. MLP is Best?
  9. 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
  10. 亮相LiveVideoStackCon 2021,网易云信分享QoS优化之道