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:

 

评分:0

我来说两句

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 7689
  • 日志数: 8
  • 建立时间: 2014-08-15
  • 更新时间: 2015-02-09

RSS订阅

Open Toolbar