• 记一次Jvm内存泄露问题排查


    一.问题

    生产环境服务器变慢

    二.分析

    从以下5个角度进行排查

       1.CPU ——  top命令

      2.内存 ——  free命令

      3.硬盘 ——  df命令

      4.磁盘Io ——  iostat命令

      5.网络Io —— ifstat命令

    三.步骤

      1.Top命令进行整机查看

     从图中看出cpu基本正常,平均加载时间也正常,内存8.8g!!!

      2.初步定位内存太高,可能原因,内存溢出

      3.细看内存,执行命令free

       发现free内存很少

           4.查看gc回收器,执行命令 jmap -heap pid(进程号)

     

       fullgc不回收

      5.查看堆内存部分使用量 执行jstat -gcutil   pid 1000

       6.已初步确定内存溢出

        7.导出内存快照 jmap -dump:format=b,file=/tmp/heap.hprof  pid  

      8.下载到本地用MAT工具查看  

       懒汉式排查,直接查看Leak Suspects快速查看泄露的可疑点

       可以看出Hashmap中存在一个6g的数据一直占用内存,而且no GC root(可达性分析) 即不会被老年代的Full Gc回收。

      9.排查最近的代码,是否有新增Job或者Mq,里面是否有用到Hashmap

      10.最终发现有个job里面有用到Hashmap去获取一个非单例的对象。

      11.第二种工具jvisualvm

     将内存快照导入jvisualvm

     选择最高的大对象点击进去查看

    四.总结

      针对不同的情况要从不同角度去分析

       先整体排查定位问题,针对不同问题排查不同地方

        一些常用排查命令请参考:https://www.cnblogs.com/shawn-sun/p/13970396.html

      

  • 相关阅读:
    Python map,zip,filter 函数
    Word 内存或磁盘空间不足,保存失败
    手机被“监听”了也不知道?这四个设置要关闭,避免隐私泄露
    查看笔记本电脑连接的WiFi密码
    一个登录论坛并上传帖子和文件的代码
    PyQt5 掩码字符
    PyQt5 控件交互与焦点控制
    PyQt5 QCommandLinkButton
    PyQt5 键盘事件
    PyQt5 qss样式
  • 原文地址:https://www.cnblogs.com/shawn-sun/p/13967715.html
Copyright © 2020-2023  润新知