首页 > 其他分享 >OutOfMemoryError: GC overhead limit exceeded

OutOfMemoryError: GC overhead limit exceeded

时间:2023-06-12 21:00:51浏览次数:35  
标签:overhead GC 内存 exceeded OutOfMemoryError limit

现象:

由于需要将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 错误的时间。

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

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

标签:overhead,GC,内存,exceeded,OutOfMemoryError,limit
From: https://www.cnblogs.com/walkersss/p/17476094.html

相关文章

  • [数论]GCD&LCM&欧拉函——推柿子+例题
    GCD&LCM&欧拉函——推柿子一、\(\sum_{i=1}^{n}[\gcd(i,n)=d]\)\(\sum_{i=1}^{n}[\gcd(i,n)=d]\)\(=\sum_{i=1}^{\frac{n}{d}}[\gcd(i,\frac{n}{d})=1]\)\(=\phi(\frac{n}{d})\)二、\(\sum_{i=1}^{n}\gcd(i,n)\)\(\sum_{i=1}^{n}\gcd(i,......
  • Educational Codeforces Round 20-C. Maximal GCD
    原题链接C.MaximalGCDtimelimitpertestmemorylimitpertestinputoutputn.Youshouldcreatesuch strictlyincreasing sequenceof k positivenumbers a1, a2, ..., ak,thattheirsumisequalto nGr......
  • 编译gcc 8.4.0
    首先下载gcc8.4.0源码:https://mirrors.sjtug.sjtu.edu.cn/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.gz解压并编译tarxzvfgcc-8.4.0.tar.gzcdgcc-8.4.0contrib/download_prerequisites/*下载gmp、mpfr、mpc和isl*/./configure--prefix=/root/soft/*这里可能需要......
  • Atcoder-AGC033C
    看到这道题,是个博弈论,没见过树上的,于是想到在数列里的博弈论,又联想到树的特殊形式————链。于是我们来讨论一下链的情况(对于没有硬币的点,我们就视为它被删掉了):讨论链的情况发现若是选择两端的点,顶点数会减一;若是选择中间的点,顶点数会减二。现在我们站在链的角度来思考......
  • 行业报告 | 企业AIGC商业落地应用研究报告
    原创|文BFT机器人01AIGC(生成式人工智能)定义02洞观:AIGC市场全貌与供应商的摩拳擦掌生成式人工智能技术的落地已经远远超出了商业化的进程在企业现有数字化作业体系中切入,成为AIGC率先落地的存量场景和SaaS同根的生成式AI技术与应用,终将在企业级应用场景中共生云与大模型深度绑定,......
  • SpringCloud第二部分(Gateway、Douker)
    统一网关Gateway为什么需要网关​ API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。分布式服务架构、微服务架构与API网关:​ 在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测......
  • SpringCloud第三部分
    初识elasticsearch​ elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容elasticsearch的作用elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容例如:在GitHub......
  • SpringCloud启动不了,报错
    初学SpringBootCloud启动遇到以下报错***************************APPLICATIONFAILEDTOSTART***************************Description:Webapplicationcouldnotbestartedastherewasnoorg.springframework.boot.web.servlet.server.ServletWebServerFactoryb......
  • 「杂题乱写」AGC 004
    「杂题乱写」AGC004点击查看目录目录「杂题乱写」AGC004A|DivideaCuboidB|ColorfulSlimesC|ANDGridD|TeleporterE|SalvageRobotsF|Namori下次放假把歌单搞进来,都不知道推什么歌了。AGC题目真挺小清新的。一般来说只要有一个突破点就可以做出来,但是并......
  • GCC基本使用
    本文重点讲解GCC的基本概念和在嵌入式环境下的使用。1.GCC工具GCC编译器:GCC(GNUCompilerCollection)是由GNU开发的编程语言编译器。GCC最初代表“GNUCCompiler”,当时只支持C语言。后来又扩展能够支持更多编程语言,包括C++、Fortran和Java等。因此,GCC也被重新定义为......