错误提示:OutOfMemoryError: PermGen 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的时候。但目前的hibernate和spring项目中也很容易出现这样的问题。
通常是加大-XX:PermSize -XX:MaxPermSize 来解决问题。
-XX:PermSize永久保存区域初始大小
-XX:PermSize永久保存区域初始最大值
修改tomcat内存大小的配置:
1.对于解压缩版本的tomcat
在tomcat目录下bin\catalina.bat文件中
remGuessCATALINA_HOMEifnotdefined setCURRENT_DIR=%cd%后面添加:
setJAVA_OPTS=-Xms256m-Xmx512m -XX:PermSize=128M-XX:MaxNewSize=256m -XX:MaxPermSize=256m-Djava.awt.headless=true
若是用startup.bat启动tomcat,设置生效.
可是若是不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,须要修改注册表中的信息
2.对于安装版的tomcat
须要修改注册表中的信息
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\JavaOptions
原值为
-Dcatalina.home=E:\Tomcat 6.0
-Dcatalina.base=E:\Tomcat 6.0
-Djava.endorsed.dirs=E:\Tomcat 6.0\common\endorsed
-Djava.io.tmpdir=E:\Tomcat 6.0\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=E:\Tomcat 6.0\conf\logging.properties
加入-XX:PermSize=128M
-XX:MaxPermSize=512M (该值若大于实际内存也会提示错误,且实际可分配的内存要小于总内存,由于硬件也占有部份内存)
重起tomcat服务,设置生效java