多项目启动,tomcat报错内存溢出“PermGen space”

一、问题描述

        多项目启动,tomcat报错内存溢出“PermGen space”

二、原理

        tomcat启动的时候出现这种错误一般是项目引用了太多的jar包,或者反射生成了太多的类,或者有太多的常量池,导致非堆内存中永久保存区域不够。这种情况可以通过jvm参数 -XX:PermSize=256M -XX:MaxPermSize=512m来配置这部分内存的大小(注意:此处内存是不会被java垃圾回收机制进行处理的地方,要合理配置,更不能超出操作系统的可用内存)。当然在该区域还可以配置其他JVM参数,比如:初始堆大小(-Xms512m)和最大堆大小(-Xmx512m),堆内存被jvm的垃圾回收机制管理,为避免在每次GC 后调整堆的大小,浪费资源,服务器一般设置-Xms、-Xmx相等(默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制)

三 、tomcat 服务启动解决

step.1  手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

catalina.sh下为:
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"


step.2 将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

 

step.3  打开注册列表编辑器,找到如下位置HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat6\Parameters\Java(Win7 X64系统则位于HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\tomcat6\Parameters\Java) ;

多项目启动,tomcat报错内存溢出“PermGen space”

 

step.4 双击右侧窗口的“Options”键值,添加如下行:

-XX:PermSize=256M -XX:MaxPermSize=512M 修改JvmMs,十进制为1024 JvmMx,十进进制为2048

 

step.5 最后建议修改完配置之后,还是把所有需要用到的jar包放到tomcat中我们自己的目录下,操作如下: 
在apache-tomcat-6.0.37\根目录下新建一个文件夹(extra-lib),并将提取的jar包放到extra-lib下;修改apache-tomcat-6.0.37\conf\catalina.properties文件,在其中添加如下代码:

shared.loader=${catalina.base}/extra-lib,${catalina.base}/extra-lib/*.jar

 

四、eclipse中启动解决

多项目启动,tomcat报错内存溢出“PermGen space”

 

step.1 双击tomcat,弹出tomcat页面

多项目启动,tomcat报错内存溢出“PermGen space”

 

step.2 点击Open launch configuration

多项目启动,tomcat报错内存溢出“PermGen space”

 

step.3 加入JVM参数 -Xms512m -Xmx512m -XX:PermSize=512M -XX:MaxPermSize=512m

多项目启动,tomcat报错内存溢出“PermGen space”

 

step.4 点击apply及ok,运行tomcat

多项目启动,tomcat报错内存溢出“PermGen space”