zoukankan      html  css  js  c++  java
  • JVM-OOM异常排查

    一:获取JVM信息

    手动:[weblogic@hkczjjapp domain9001]$ jmap -dump:format=b,file=bb.bin 68048
    自动:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/heap/dump -----让jvm在遇到oom异常时自动dump内存快照

    二:常见OOM异常说明

    java.lang.OutOfMemoryError: Java heap space
    原因:Heap内存溢出,意味着Young和Old generation的内存不够。
    解决:调整java启动参数 -Xms -Xmx 来增加Heap内存。
    
    java.lang.OutOfMemoryError: unable to create new native thread
    原因:Stack空间不足以创建额外的线程,要么是创建的线程过多,要么是Stack空间确实小了。
    解决:由于JVM没有提供参数设置总的stack空间大小,但可以设置单个线程栈的大小;而系统的用户空间一共是3G,除了Text/Data/BSS /MemoryMapping几个段之外,Heap和Stack空间的总量有限,
          是此消彼长的。因此遇到这个错误,可以通过两个途径解决:1.通过 -Xss启动参数减少单个线程栈大小,这样便能开更多线程(当然不能太小,太小会出现StackOverflowError);
          2.通过-Xms -Xmx 两参数减少Heap大小,将内存让给Stack(前提是保证Heap空间够用)。
    
    java.lang.OutOfMemoryError: PermGen space
    原因:Permanent Generation(方法区)空间不足,不能加载额外的类。
    解决:调整-XX:PermSize= -XX:MaxPermSize= 两个参数来增大PermGen内存。一般情况下,这两个参数不要手动设置,只要设置-Xmx足够大即可,JVM会自行选择合适的PermGen大小。
    
    java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    原因:这个错误比较少见(试着new一个长度1亿的数组看看),同样是由于Heap空间不足。如果需要new一个如此之大的数组,程序逻辑多半是不合理的。
    解决:修改程序逻辑吧。或者也可以通过-Xmx来增大堆内存。
    
    java.lang.OutOfMemoryError: GC overhead limit exceeded
    原因:这个错误会出现在这个场景中:GC占用了多余98%(默认值)的CPU时间却只回收了少于2%(默认值)的堆空间。目的是为了让应用终止,给开发者机会去诊断问题。一般是应用程序在有限的内存
          上创建了大量的临时对象或者弱引用对象,从而导致该异常。虽然加大内存可以暂时解决这个问题,但是还是强烈建议去优化代码,后者更加有效。
    解决:在确认代码正常情况下,加大JVM内存
          
    java.lang.StackOverflowError
    原因:这也内存溢出错误的一种,即线程栈的溢出,要么是方法调用层次过多(比如存在无限递归调用),要么是线程栈太小。
    解决:优化程序设计,减少方法调用层次;调整-Xss参数增加线程栈大小。

    三:JVM信息解析

      1、jhat

    [weblogic@hkczjjapp domain9001]$ jhat bb.bin -----生成server形式的解析网址,可查看,当文件较大时jhat本省会OOM异常

      2、mat

    1、window下载:http://www.eclipse.org/mat/downloads.php
    2、启动MAT,启动文件MemoryAnalyzer.ini内存配置应大于dump文件大小
    3、打开堆栈文件,file--》open heap dump--》等待解析
    4、分析解析结果

     

     

     

     

  • 相关阅读:
    ToDesk 远程连接软件 连接远程电脑后黑屏
    Kentico updateall
    Stylesheet not loaded because of MIME-type
    Linux tail 命令作用及其常用用法
    浅析Linux中stty命令的作用、常用用法及案例使用
    【MySQL】修改表的存储引擎
    【MySQL】查看MySQL的默认存储引擎(Win环境)
    【Swing/STS】在Spring Tool Suite中制作可执行jar
    [Swing]我的作品 图片幻灯式浏览软件PicturesShow 献给广大美图爱好者的福音
    【Java Swing】如何给Jframe添加键盘和鼠标事件处理
  • 原文地址:https://www.cnblogs.com/chunxiaozhang/p/14085529.html
Copyright © 2011-2022 走看看