Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2282053
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Java

2015-01-04 19:28:28

前几天公司一个项目的服务器坏了,就换了一个备份服务器顶替一下,但是没有跑一会就宕机了,一直报 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 让服务并行回收内存空间。但是,这两个参数配置上去以后,也会占用一定的内存空间。
转自:
阅读(3699) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~