java JVM常见的四大异常及处理方案

区域作用异常控制参数解决思路
java堆存放对象的实例。java.lang.OutOfMemory Error:Java heap space

-Xms(初始化堆),

-Xmx(最大堆),

-Xmn(新生代)

1、先查看是不是内存泄漏(内存中的对象是不是必须的),如果是泄漏,则找到与GC root 的路径解决泄漏。

2、看物理内存是否允许加大-Xms,-Xmx。

3、检查堆中是不是有对象实例一直在内存中没有释放。

4、技巧让-Xms = -Xmx,减少内存扩展的开销。

虚拟机栈和本地方法栈控制方法的执行。

如果线程请求的栈深度大于虚拟机所允许的最大深度:java.lang.StackOverflow Error

如果续集你在扩展栈时无法申请到足够的内存空间:

java.lang.OUtOfMemory Error

-Xss

1、加大-Xss参数。

2、减少线程。

3、更换64位虚拟机。

4、减少最大堆(Xmx)。

方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。java.OutOfMemory Error:PermGen space

-XX:PermSize

-XX:MaxPermSize

这是最常见的内存溢出异常。

1、加大参数(治标不治本)。

2、增加参数:-XX:PrintGCDetails,-XX:+PrintGCTimeStamps和-XX:+PrintGCDateStamps,还可以指定日志输出到文件:-Xloggc:<fileName>。通过查看GC日志来查看新生代GC(Minor GC)和老年代GC(Full GC或MajorGC)的回收效率和回收频率。通常Minor GC会很频繁,回收效率高才是对。

3、稍微的加大Survivor1  Survivor2的空间。

本机直接内存如NIO,就是直接通过此内存实现。

java.lang.OutOfMemory Error,有

allocate、Native字样

-MaxDirectMemorySize

如不指定则与-Xmx一致。

合理规划服务器内存,预留足够的内存给本地内存。加大参数。

空间关系:

  java堆 = 新生代 + 老年代。

  新生代 = Eden(伊甸园) + Survivor1 + Survivor2。

  大多数情况下,对象在新生代Eden区中分配。当Eden中没有足够的空间时,就触发一次Minor GC。Survivor2 是Minor GC时用于复制用的。当发生Minor GC时如果发现所要辅助的对象(活着的对象)无法存放到Survivor2中,则通过分配担保机制提前转移到老年代中去。

  如配置-Xms20M,-XMx20M,-Xmn10M,-XX:SurvivorRatio=8。

含义:java堆大小为20M,不可扩展,其中10MB分配给新生代,剩下的10MB分给老年代。-XX:SurvivorRatio=8 表示新生代中Eden区与其中一个Survivor区的空间比例为8:1。即 eden space 8192k,from space 1024k,to space 1024k。新生代总可用空间为9216kb(Eden区+1个Survivor区的总量)。

我们公司centos6.8 ,100G的内存,配置如下:

JAVA_OPTS="-Xms8g -Xmx8g -XX:ParallelGCThreads=8 -XX:PermSize=2g -XX:MaxPermSize=4g -Xss512k -Xmn6g -XX:-DisableExplicitGC -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled"

CATALINA_OPTS="-Xms8g -Xmx8g -XX:ParallelGCThreads=8 -XX:PermSize=2g -XX:MaxPermSize=4g -Xss512k -Xmn6g -XX:-DisableExplicitGC -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled"


.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值