TOmcat内存溢出解决

参照:http://elf8848.iteye.com/blog/378805  tomcat内存问题设置详解   

http://www.holdjava.com/holdjava/jvmjishu/60035.html  解决JVM内存溢出的问题 

http://unixboy.iteye.com/blog/174173  JVM调优总结 

http://dong-shuai22-126-com.iteye.com/blog/1772093  tomcat的修改

最近在把在项目 deploy 到 Tomcat 6.0.20 上时,在操作一段时间就会出现 java.lang.OutOfMemoryError: PermGen space,在网上搜索得到以下内容。
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域
OutOfMemoryError: PermGen 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 中加入:-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

因为项目中引用了很多的 jar 包,而这些 jar 包中的 class 信息会被 JBoss 的 class loader 加载到 PermGen space 区域,在 JVM 默认的情况下,该部分空间的大小只有 4M,在 jar 包非常多的情况下,显然是不够用的,所以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。另外,如果 heap 内存不足出现 java.lang.OutOfMemoryError: Java heap space 时,可以通过 -Xmx512m 指定最大 heap 内存来解决这样的问题。

---

java内存溢出有三种,堆 Heap  栈 Stack 内存 [PermGen space] 

java.lang.OutOfMemoryError:Javaheapspace :   xmn 年轻代大小  xms  初始JVM内存大小  xmx   JVM最大可用内存  xss  每个线程的堆栈大小

 XX:NewRatio  设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代   

-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比

-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。

 windows  是  Catalina.bat  :set JAVA_OPTS=-Xms128m -Xmx350m   

 

posted @ 2014-01-22 09:46  教程学习  阅读(91)  评论(0)    收藏  举报