tomcat 出现的 PermGen Space问题

     最近在做项目的过程中,我在tomcat下部署了三个应用。我发现tomcat可以正常启动,但是运行一段时候后就会报以下错误:

     java.lang.OutOfmemoryError:PermGen Space。我本来担心是某一个工程的问题,后来我把三个应用中的任意两个部署上去都不会出现上述情况。后来从网上查的这个问题的原因,总结如下:

     PermGen Space指的是内存的永久保存区,该块内存主要是被JVM存放class和mete信息的,当class被加载loader的时候就会被存储到该内存区中,与存放类的实例的heap区不同,java中的垃圾回收器GC不会在主程序运行期对PermGen space进行清理,所以当我们的应用中有很多的class时,很可能就会出现PermGen space的错误。

     解决方法:

     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:MaxSize=512m

      2.修改 TOMCAT_HOME/bin/catalina.bat文件的内容:在 %_EXECJAVA% %JAVA_OPTS% 后面添加 -Xms=256m -Xmx512m  注意哦,前后后有空格的

例如: %_EXECJAVA% %JAVA_OPTS% -Xms=256m -Xmx512m(空格)后面的内容不变

      3. 可以考虑将相同的第三方jar文件拷贝到tomcat/shared/lib 目录下,这样可以减少jar文件重复占用内存的。

       我的系统是win7,用的第一种方法,问题解决。第二种和第三种方法本人没有测试。

posted @ 2013-01-05 12:49  雨心竹  阅读(642)  评论(0编辑  收藏  举报