zoukankan      html  css  js  c++  java
  • OOM排查《记录》(转发)

    OOM排查过程步骤

    1、先查看应用进程号pid:     ps  -ef | grep  应用名

    2、查看pid垃圾回收情况:  jstat  -gc  pid  5000(时间间隔)

    即会每5秒一次显示进程号为68842的java进成的GC情况,显示内容如下图:

    结果说明:显示内容说明如下(部分结果是通过其他其他参数显示的,暂不说明):

    S0C:年轻代中第一个survivor(幸存区)的容量 (字节) 

    S1C:年轻代中第二个survivor(幸存区)的容量 (字节) 

    S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) 

    S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) 

    EC:年轻代中Eden(伊甸园)的容量 (字节) 

    EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) 

    OC:Old代的容量 (字节) 

    OU:Old代目前已使用空间 (字节) 

    PC:Perm(持久代)的容量 (字节) 

    PU:Perm(持久代)目前已使用空间 (字节) 

    YGC:从应用程序启动到采样时年轻代中gc次数 

    YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) 

    FGC:从应用程序启动到采样时old代(全gc)gc次数 

    FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s) 

    GCT:从应用程序启动到采样时gc用的总时间(s) 

    NGCMN:年轻代(young)中初始化(最小)的大小 (字节) 

    NGCMX:年轻代(young)的最大容量 (字节) 

    NGC:年轻代(young)中当前的容量 (字节) 

    OGCMN:old代中初始化(最小)的大小 (字节) 

    OGCMX:old代的最大容量 (字节) 

    OGC:old代当前新生成的容量 (字节) 

    PGCMN:perm代中初始化(最小)的大小 (字节) 

    PGCMX:perm代的最大容量 (字节)   

    PGC:perm代当前新生成的容量 (字节) 

    S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 

    S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 

    E:年轻代中Eden(伊甸园)已使用的占当前容量百分比 

    O:old代已使用的占当前容量百分比 

    P:perm代已使用的占当前容量百分比 

    S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节) 

    S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节) 

    ECMX:年轻代中Eden(伊甸园)的最大容量 (字节) 

    DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满) 

    TT: 持有次数限制 

    MTT : 最大持有次数限制 

    3、开启OOM快照: 

    -XX:+HeapDumpOnOutOfMemoryError(开启堆快照)

    -XX:HeapDumpPath=C:/m.hprof(保存文件到哪个目录)

    4、dump 查看方法栈信息:

    jstack -l  pid  >  /home/test/jstack.txt

    5、dump 查看JVM内存分配以及使用情况

    jmap  -heap  pid  >  /home/test/jmapHeap.txt

    6、dump jvm二进制的内存详细使用情况 (效果同在Tomcat的catalina.sh中添加 set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/test//oom.hprof  此文件需要借用内存分析工具如:Memory Analyzer (MAT)来分析)

    jmap -dump:format=b,file=/home/test/oom.hprof  pid

     

    OOM一般有以下两种情况:

    1、年老代堆空间被占满

    异常:java.lang.OutOfMemoryError:java  heap space

    说明:这是最典型的内存泄漏方式,简单说就是所有堆空间都被无法回收的垃圾对象占满,虚拟机再也无法分配新空间

    解决方案:这种方式解决起来比较简单,一般就是根据垃圾回收前后的情况对比,同时根据对象引用情况(常见的集合对象引用)分析,基本都可以找到泄漏点

    2、持久代被占满

    异常:java.lang.OutOfMemoryError:PermGen space

    说明:Perm 空间被占满,无法为新的 class 分配存储空间而引发的异常。这个异常以前是没有的,但是在 java 大量使用反射的今天这个异常就比较常见了。主要原因是大量动态反射生成的类不断被加载,最终导致 Perm 区被占满。更可怕的是,不同的 classLoader 即便使用相同的类,但是都会对其进行加载,相当于同一个东西,如果有 N 个classLoader 那么它将会被加载 N 次。因此,在某些情况下,这个问题基本视为无解,当然,存在大量 classLoader 和大量反射类的情况并不多

    解决方案:增加持久代内存 ,例如:-XX:MaxPermSize=16M

    原文链接:https://blog.csdn.net/ywlmsm1224811/article/details/91866707
     
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    element表格添加序号
    ZOJ 3822 Domination(概率dp)
    HDU 3037(Lucas定理)
    HDU 5033 Building(单调栈维护凸包)
    HDU 5037 Frog(贪心)
    HDU 5040 Instrusive(BFS+优先队列)
    HDU 5120 Intersection(几何模板题)
    HDU 5115 Dire Wolf(区间dp)
    HDU 5119 Happy Matt Friends(dp+位运算)
    C++ string详解
  • 原文地址:https://www.cnblogs.com/name-lizonglin/p/12837523.html
Copyright © 2011-2022 走看看