• 记一次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

      

  • 相关阅读:
    CentOS 7.0关闭默认防火墙启用iptables防火墙
    Linux下安装jdk1.8
    Linux下的tar压缩解压缩命令详解
    centos7上安装redis
    通过克隆虚拟机来创建多个虚拟机
    深度学习的网络资料
    在ubuntu中添加widows启动项的简单方法
    循环神经网络RNN的基本介绍
    统计学习——随机过程
    spark机制理解(一)
  • 原文地址:https://www.cnblogs.com/shawn-sun/p/13967715.html
Copyright © 2020-2023  润新知