2024年5月7日发(作者:)

Tomcat7启动的时候报emoryError: PermGen space错

2014-7-17

一、 问题描述

Tomcat7下Webapp下同时放多个程序,启动的时候报

emoryError: PermGen space错误。

排查:放置单个程序,启动Tomcat看看是否成功,如果单个能够成功,则说明程序

没有问题,如果单个不能成功,先找出原因,保证单个程序能启动成功。

注意:对于Class文件较多的单个程序,启动Tomcat时也可能出现该错误。

二、 具体原因

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(该方法没试过)

在tomcat_home/bin目录下找到,用文本编辑器打开,加上下面一行:

set JAVA_OPTS= -Xms1024M -Xmx1024M -XX:PermSize=256M

-XX:MaxNewSize=256M -XX:MaxPermSize=256M

解释一下各个参数:

-Xms1024M:初始化堆内存大小(注意,不加M的话单位是KB)

-Xmx1029M:最大堆内存大小

-XX:PermSize=256M:初始化类加载内存池大小

-XX:MaxPermSize=256M:最大类加载内存池大小

-XX:MaxNewSize=256M:这个还不清楚哈,有知道的说声

还有一个-server参数,是指启动jvm时以服务器方式启动,比客户端启动慢,但性

能较好,大家可以自己选择。

➢ 安装版的Tomcat(已经试过,能正常启动)