码迷,mamicode.com
首页 > 其他好文 > 详细

JBOSS内存溢出处理

时间:2016-05-23 22:41:45      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

JBOSS内存溢出处理

前几天公司一个项目的服务器坏了,就换了一个备份服务器顶替一下,但是没有跑一会就宕机了,一直报java.lang.OutOfMemoryError。。。。一看到这里,就知道是内存溢出,但是JBoss的内存配置已经达到1024M了,而且对JBoss内存的监测结果看,并不高,怎么会死机呢,好奇怪。搞了半天还是没有结果。郁闷~~~~ 


     到了最后,已经绝望了我,打算换一个JBoss版本,再换一个JDK,看看是不是这些的问题。但是再换以前,我就把日志又重新看了一次,发现一个问题。报的java.lang.OutOfMemoryError后面还有内容:java.lang.OutOfMemoryError: PermGen space,这个好像和java.lang.OutOfMemoryError: Java heap space这个不一样。最后找了一下这个异常! 

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。 

改正方法,在 run.bat 中加入:-Xms512m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 
因为项目中引用了很多的 jar 包,而这些 jar 包中的 class 信息会被 JBoss 的 class loader 加载到 PermGen space 区域,在 JVM 默认的情况下,该部分空间的大小只有 4M,在 jar 包非常多的情况下,显然是不够用的,所以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。 

我的JBoss里面装载了6个应用,jar包和class加起来有100m左右,配上这个参数后,一切OK,最后服务器修好以后,发现,这个里面的JBoss也是这么来配置的,哎~~看来以后备份,最好还是吧JBoss一起备份出来吧! 
而当出现出现 java.lang.OutOfMemoryError: Java heap space 这个异常时,通过调节-Xms512m -Xmx1024m这个就可以解决。 
另外,这个两个参数 -XX:+UseParallelGC -XX:+UseParallelOldGC 让服务并行回收内存空间。但是,这两个参数配置上去以后,也会占用一定的内存空间。 

 

JBOSS内存溢出处理

标签:

原文地址:http://www.cnblogs.com/firstdream/p/5521623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!