首页 > 其他分享 >OutOfMemoryError: GC Overhead Limit如何解决 Exceeded

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded

时间:2023-08-15 23:02:23浏览次数:40  
标签:map 示例 OOM Overhead 内存 JVM Exceeded OutOfMemoryError Limit

每次面试都会被问到JVM 、内存溢出等问题。解决方案大同小异:

1.Disabling the error check altogether, via “-XX:-UseGCOverheadLimit”. 此种方式最终会改报错为java.lang.OutOfMemoryError: Java heap space(治标不治本)

2.增大堆内存。既然堆内存少了,那就增加堆内存即可,-Xms64M -Xmx64M  ,如果存在内存泄漏,那还是治标不治本  

3.优化内存泄漏的代码(终极方案),排查思路如下:

一般生产有oom时,本地如果使用jmiter压测,适当调整堆内存都可以复现问题。以下场景为示例:

开发环境:window、idea、jdk1.8,com.github.oshi,3.9.1,

系统功能:获取服务器JVM、内存、CPU、磁盘等信息

问题现象:系统在运行3-4天时,会出现OOM的现象

java.lang.OutOfMemoryError: GC overhead limit exceeded

排查思路:

 1,使用jimiter进行现场环境模拟测试(并发数、运行时长)

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_内存泄漏

2,本地启动服务,双击jvisualvm.exe,使用jvisualvm监控

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_堆内存_02

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_内存泄漏_03

通过上图可以看出内存一直在缓慢上升以及JVM 垃圾回收活动频繁。而且垃圾回收后,内存仍未减少,初步判断,程序种肯定会有的对象没有释放,导致内存无法回收。随着时间的运行,肯定会出现OOM
 

3,堆dump,分析内存种的对象

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_JVM_04

 3,如下图示例。一般情况下查看堆内存种的自己熟悉的类,即可快速定位到问题:如oshi.util.plateform.windows.PerfDataUtil

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_内存泄漏_05

 第二个方法是通过对象最多的类,看持有者是谁,点击HashMap,如下,引用对象都是指向PerfDataUtil

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_堆内存_06

找到问题,是因为调用这个对应时,这个map是被staic final修饰,所有线程都会操作这个map,如果只放不清除的话,肯定会出现OOM

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_JVM_07

修改代码,本地重新压测测试, 

private static final Map<PerfCounter, HANDLEByReference> counterMap = new HashMap<>();这个map只put 不remove.所以map会越来越大

本示例是修改版本号,将3.9.1修改成<oshi.version>6.4.1</oshi.version>

6.4.1种没有这个问题。

 修复后的效果,堆内存无明显上升趋势。测试没问题后,需要长期观察后,以防还有遗漏的情况

OutOfMemoryError: GC Overhead Limit如何解决 Exceeded_JVM_08

标签:map,示例,OOM,Overhead,内存,JVM,Exceeded,OutOfMemoryError,Limit
From: https://blog.51cto.com/u_16176998/7094972

相关文章

  • Practical Covertly Secure MPC for Dishonest Majority – or: Breaking the SPDZ Li
    Abstract.SPDZ(pronounced“Speedz”)isthenicknameoftheMPCprotocolofDamgardetal.fromCrypto2012.˚SPDZprovidedvariousefficiencyinnovationsonboththetheoreticalandpracticalsidescomparedtopreviousworkinthepreprocessingmodel.In......
  • 【翻译】为什么我们需要极限和无穷小?(Why Do We Need Limits and Infinitesimals?)
    那么多数学课,没有任何上下文,就跳到极限,无穷小,非常小的数(T)。但是我们为什么要在乎呢?数学帮助我们模拟世界。我们可以把一个复杂的想法(一条蜿蜒的曲线)分解成更简单的部分(矩形):但是,我们想要一个精确的模型。矩形越细,模型越精确。从矩形构建的更简单的模型比直接处理复杂的无定形斑......
  • 使用limit 限制结果集
    相关阅读:https://www.nowcoder.com/practice/c7ad0e2df4f647dfa5278e99894a7561?tpId=199&tqId=1971219&ru=%2Fexam%2Foj&qru=%2Fta%2Fsql-quick-study%2Fquestion-ranking&sourceUrl=%2Fexam%2Fojlimit子句可以用于强制select语句返回指定的记录数limit只接受一个或两个数......
  • k8s 准入控制器之LimitRanger
    LimitRanger概述尽管用户可以为容器或Pod资源指定资源需求及资源限制,但这并非强制性要求,那些未明确定义资源限制的容器应用很可能会因程序Bug或真实需求而吞掉本地工作节点上的所有可用计算资源。因此妥当的做法是,使用LimitRange资源在每个名称空间中限制每个容器的最小及最大计算......
  • PostgreSQL - limit offset SQL优化
    这个案例来自项目组最近一直在做性能优化的一个案列,我们项目每周都有通过Kibana(EFLK)导出性能周报,最近一周出现一个分页查询的API出现了slowcall(响应大于1秒),我们对代码和SQL进行了review,Code部分这里省略掉,讲下SQL的部分,下面是SQLselectt.id,t.xxfromxx_tabletwhe......
  • kernel: oracle (xxxx): Using mlock ulimits for SHM_HUGETLB is deprecated
    Oracle数据库运行在linux6/7中,启用大页之后,我们经常在/var/log/messages里面会看到类似这样的记录:Jul3109:46:27p1erpdb01kernel:oracle(6444):UsingmlockulimitsforSHM_HUGETLBisdeprecated.-------官方文档HowToAddanon-rootgrouptohugetlb_shm_grou......
  • CLAHE:Contrast Limited Adaptive histgram equalization
    论文:ContrastlimitedadaptivehistogramequalizationZuiderveld,Karel."Contrastlimitedadaptivehistogramequalization."GraphicsgemsIV.AcademicPressProfessional,Inc.,1994.目录 一、背景1、对比度和直方图均衡HE2、HE的问题3、AHE  4、底噪问题二、CLAHE1......
  • rabbitmq告警Error: health check failed. Message: resource alarm(s) in effect:[{r
     这个错误信息表示RabbitMQ的内存使用量超出了预设的阈值,导致触发了RabbitMQ的内存警告阈值报警。RabbitMQ在运行过程中会不断地将消息存储在内存中,如果内存使用量超出了预设的阈值,就会触发内存警告阈值报警。这个阈值的默认值是40%的物理内存,可以通过修改Rabbi......
  • MySQL在分页查询时的limit深分页问题
    在平时业务中我们会发现当分页数据特别大的时候,会出现SQL很慢的情况,下面我们来分析下为什么会出现这种情况以及如何去解决一、limit深分页问题解析我们有如下一张表CREATETABLEaccount(idint(11)NOTNULLAUTO_INCREMENTCOMMENT'主键Id',namevarchar(255)DEFAU......
  • 理解ASP.NET Core - 限流(Rate Limiting)
    注:本文隶属于《理解ASP.NETCore》系列文章,请查看置顶博客或点击此处查看全文目录概述在微服务化的架构设计中,网关扮演着重要的看门人角色,它所提供的功能之一就是限流。而对于众多非微服务化的系统来说,可能并不会部署网关(无论是因为成本还是复杂度),在这种场景下,为了实现限流,微......