tomcat服务器运行一段时间,报异常:java.lang.OutOfmemoryError: PermGen Space 的错误,导致项目无法正常运行。
介绍:
PermGen Space:指的是内存的永久保存区,该块内存主要是被JVM用来存放 class 和 mete 信息的,当 class 被加载 loader 的时候就会被存储到该内存区中,与存放类的实例的heap区不同,java中的 垃圾回收器GC 不会在主程序运行期对 PermGen space 进行清理。
原因:
当我们的应用中有很多的class时,很可能就会出现PermGen space的错误。
我们的 tomcat 在重启的时候,不是使用的 ./bin/shutdown.sh 而是使用 kill -9 xxx 直接杀掉,这样的话,存在 PermGen space 里面的内存不会被释放的,这样多长进行 kill 之后,就会导致系统的内存被渐渐吃完了,直到最后 tomcat 报错。
解决方法:
修改tomcat/bin目录下的catalina.bat。
在“rem ----- Execute The Requested Command ---------------------------------------”下加入下面的一行
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=512m -XX:MaxPermSize=512m
这种方法只在使用tomcat时管用,使用eclipse时不管用
有其他资料说是按照这种格式设置
JAVA_OPTS="-server -Xms800m -Xmx800m -XXNewSize=256M -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m"
但是我试过,不起作用