PermGen Space问题

问题: 
最近做项目碰到了让我纠结的问题,tomcat服务器运行一段时间,总是会自动报异常:java.lang.OutOfmemoryError: PermGen Space 的错误,导致项目无法正常运行。

介绍: 
PermGen Space:指的是内存的永久保存区,该块内存主要是被JVM用来存放 class 和 mete 信息的,当 class 被加载 loader 的时候就会被存储到该内存区中,与存放类的实例的heap区不同,java中的 垃圾回收器GC 不会在主程序运行期对 PermGen space 进行清理

原因:

  1. 当我们的应用中有很多的class时,很可能就会出现PermGen space的错误。
  2. 我们的 tomcat 在重启的时候,不是使用的 ./bin/shutdown.sh 而是使用 kill -9 xxx 直接杀掉,这样的话,存在 PermGen space 里面的内存不会被释放的,这样多长进行 kill 之后,就会导致系统的内存被渐渐吃完了,直到最后 tomcat 报错。

解决方法:

第一种方法:修改tomcat/bin目录下的catalina.bat。
在“rem ----- Execute The Requested Command ----------------------”下加入

JAVA_OPTS="-server -Xms800m -Xmx800m -XXNewSize=256M -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m" 。

这种方法在只使用tomcat时管用,但使用eclipse时不管用。

第二种方法:修改eclipse的Run Configurations。

点击“Run”-"Run Configurations",在打开的窗口中点击“Arguments”选项卡。
在VM arguments中内容最下边输入:
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
保存后再次重启后已经不再报错了。
就是这个方法完好地解决了我的问题。

猜你喜欢

转载自blog.csdn.net/qq_32285039/article/details/81128493