解决这个问题之前,我们先来了解一下什么是PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。
说说为什么会内存益出:
(1)这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同。
(2) GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。
如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以减少jar 文档重复占用内存
第一步:双击tomcat服务器->Overview->Open lauch configuration -->Arguments
也可以通过下面的方式打开上面的界面:
点击“Run” – “Run Configurations…”,选中Tomcat Server,进入Arguments分页
第二步:修改VM arguments 配置,加入提升初始分配空间的参数
-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256M
参数的解释
-Xms256m : 表示虚拟机占用系统的最小内存为256M。
-Xmx1024m :表示虚拟机占用系统的最大内存为1024M.
-XX:PermSize:最小堆大小。一般报内存不足时,都是说这个太小,堆空间剩余容量小于5%就会警告,建议把这个稍微设大一点,视自己机器内存大小来设置
-XX:MaxPermSize:最大堆大小。这个也适当大些
补充知识点:
Linux下如何修改JVM内存大小
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
cygwin=false