zoukankan      html  css  js  c++  java
  • springboot1.5版本

    【问题现象】

    应用不定期出现内存占用较高、CPU使用率高,内存占满后一直无法释放。

    查询后台日志存在警告日志: WARN o.s.cloud.netflix.metrics.servo.ServoMonitorCache [57]- timerCache is above the warning threshold of 1000 with size 511487
    使用jmap -histo pid 命令查看堆内存使用情况,发现大量对象实例未被及时回收(大量对象实例被创建且未及时释放掉)

     num     #instances         #bytes          class name
    ----------------------------------------------
       1:      10892148      261411552        java.util.concurrent.atomic.AtomicLong
       2:       4082727       108873888        [Ljava.util.concurrent.atomic.AtomicLong;
    ————————————————

    在ServoMetricsAutoConfiguration 配置类中,spring.metrics.servo.enabled默认为true 

     这行一直在往map里边put,导致map过大触发了下图的这行逻辑,并打印了告警日志,所以这部分的内存一直得不到释放,可能导致内存泄漏

    【解决方案】

    解决思路: 升级springboot版本或者关闭spring.metrics.servo.enabled=false;

    其中升级springboot版本,涉及范围比较大,springcloud也要同时进行升级。 

    最终选择了后者在 yml配置文件中增加 spring.metrics.servo.enabled=false;搞定

     

    参考链接   https://blog.csdn.net/slsshuang/article/details/107790100

  • 相关阅读:
    第十七节--Hystrix服务熔断
    第十六节--Hystrix之服务降级全局配置
    第十五节--Hystrix之服务降级
    第十四节--Hystrix断路器
    第十三节--OpenFeign服务接口调用
    第十二节--Ribbon
    第十一节--三个注册中心对比
    uni-app开发小说阅读器
    H5+微信朋友、朋友圈分享
    uni-app开发音乐电子书库
  • 原文地址:https://www.cnblogs.com/yanghj010/p/14558228.html
Copyright © 2011-2022 走看看