一次完整的JVM内存泄漏故障排查记录

前言

记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配的原理分析以及常用的JVM问题排查手段和工具分享

故障描述和排查过程

告警服务报警前置核心服务jvm内存达到80%以上

排查过程

1、从监控系统看下内存的具体占用情况
2、看下我们当前内存报警服务的jvm参数配置
3、确定jvm参数配置是否合理

在这里插入图片描述

对内存分析

从内存告警容器上获取对内存的快照

jmap -dump:live,format=b,file=xxxx.hprof pid

导出后,将Dump文件下载回本地
使用JDK自带的JVisualVM打开日志文件
分析当前系统中占用内存较多的类

最后找到原因是服务中使用的消息中间件是rabbitmq,使用confirm机制的时候,开发人员会把当前发送的消息放到 缓存类的ConcurrentHashMap中

    private static Map<String, String> map = new ConcurrentHashMap<>();

而在消息确认的时候是要在消息确认的时候在finally中主动删除的
在这里插入图片描述
新上线的一个发送者缓存消息后一直未主动进行删除,最后ConcurrentHashMap占用内存越来越大,jvm无法进行回收最后造成内存溢出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值