PermGen space
上一篇 /
下一篇 2014-08-26 10:44:04
/ 个人分类:tomcat
昨天测试时,日志报了一个错:Java.lang.OutOfMemoryError:PermGen space。
解决方案是:进入TOMCAT_HOME/bin/catalina.sh在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m“,这个值可以根据服务器的内存增大。
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
今天查tomcat设置时发现了一篇文章,办过来,加深记忆。
原文地址:http://elf8848.iteye.com/blog/378805。
常见的Java内存溢出有三种:
1.java.lang.OutOfMemoryError:java heap space---jvm heap堆溢出。
jvm在启动的时候会自动设置heap的值,其初始空间(-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。heap的大小是young generation和tenured generation之和。在jvm中如果98%的时间用于gc且可用的heap size不足2%,将抛出该异常。解决方法:手动设置jvm heap堆的大小。
2.java.lang.OutOfMemoryError:PermGen space-ermGen space溢出
PermGen space的全称是Permanent generation space,是指内存的永久保存区域。解决方法:手动设置MaxPermSize的大小。
3.java.lang.StackOverflowError---栈溢出
jvm采用栈式的虚拟机,函数的调用过程都体现在堆栈和退栈上。调用构造函数的层太多,以至于把栈区溢出了。一般栈区远远小于堆区,因为函数调用过程不会多余上千层。而即便每个函数调用需要1K的空间,那么栈区也不过需要1m的空间通常栈的空间是1-2m,通常递归也不要递归太多次,容易溢出。解决方法:修改程序。
linux下的tomcat:修改tomcat下的bin/catalina.sh
位置cygwin=false 前。
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"
收藏
举报
TAG: