zoukankan      html  css  js  c++  java
  • 【OOM】解决思路

    一、什么是OOM?

         OOM就是outOfMemory,内存溢出!可能是每一个java人员都能遇到的问题!原因是堆中有太多的存活对象(GC-ROOT可达),占满了堆空间。

    二、怎么解决?

    1、拿到内存溢出时的heapdump.hprof文件

            可在程序启动时增加启动参数:  -XX:+HeapDumpOnOutOfMemoryError  XX:HeapDumpPath=/test/test/test.hprof

            如果没有加这个参数怎么办?

            不用担心,我们可以通过命令实时输出这个文件:

                 1、jps命令查到当前java服务的pid ;

                 2、jmap -dump:live,format=b,file=/test/test/test.hprof pid ;

                 3、去/test/test/文件夹下拿到test.hprof文件

    注意:运行环境要安装完整的jdk.(有的机器上可能只安装了jre,那么jps、jmap这些命令就没法使用了);/test/test/这个文件夹要提前创建,不然不会输出hprof文件。

    分析heapdump.hprof文件。

         2.1:分析heapdump.hprof文件,我推荐eclipse出的 MemoryAnalyzer 工具(https://www.eclipse.org/mat/downloads.php)。一般打开hprof文件后主要看两个东西:

              Hisogram:内存直方图

              Leak Suspects:内存溢出可能的原因

         2.2:针对不通类型的OOM,从不同角度着手。

              先说几个Histogram参数:

              Objects:对象数量             

              Shallow Heap:  Shallow Size是对象本身占据的内存的大小,不包含其引用的对象。

              Retained Heap:Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。

           2.2.1:Metaspace/PermGen:瞄准Class对象,在Histogram中找到最多的Class对象

          2.2.2:Heap space:瞄准占空间最大的对象,在Histogram中找到heap最大的对象。

    接下来就是去Path to GC Root去看代码分析了,情况较多,既要了解JVM内存模型,又要具备扎实的Java基础。然后结合自己代码情况下手,就不展开了。

     后续我将介绍阿里的线上内存定位神器 Arthas

  • 相关阅读:
    【C语言】中的版本规范(C89 C99等)
    【微机】计算机系统组成
    【微机】验证负数以补码存储程序 C语言
    katalon studio升级到6.3.3版本后如何生成测试报告
    使用Katalon Studio进行数据驱动测试的方法(转)
    katalon 参数化
    Katalon中的测试对象、用例和套件的命名规范
    转载kalaton故障处理
    Katalon Studio IE浏览器 不好用 无法录制
    Katalon Studio操作界面详细说明(转载)
  • 原文地址:https://www.cnblogs.com/kbian/p/11780508.html
Copyright © 2011-2022 走看看