Tomcat后台日志输出OutOfMemoryError: PermGen space,大家一般都知道是内存不足。但这时要注意,你去通过-Xmx参数来扩大内存是不起作用的。

Tomcat中的内存有两种类型,一种是永久保存区内存,如果不足就会报OutOfMemoryError: PermGen space,还有一种是堆区内存,不足则报java.lang.OutOfMemoryError: Java heap space错误。

上述错误OutOfMemoryError: PermGen space很明显是永久保存区内存不足,产生的原因一般是由于你的jar文件及class文件太多,这时就通过-XX:MaxPermSize参数来调整,该参数默认值是64M,可以增至128M,同时也可以考虑将一些通用的jar文件,比如数据库jdbc驱动等jar文件放到tomcat\lib下,减少jar的总数。

linux下修改%tomcat%/bin/catalina.sh文件,windows下修改%tomcat%\bin\catalina.bat文件,在setlocal下一行(如果没有setlocal,就在注释结束后)增加

set "JAVA_OPTS=%JAVA_OPTS% -XX:MaxPermSize=128m",保存即可。

一般完整的内存设定为:

set "JAVA_OPTS=%JAVA_OPTS% -Xms1024m -Xmx1024m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m"。

注意,如果是windows下,将tomcat注册成了服务,则需要通过tomcat9w.exe文件打开窗口中设置,或是在注册表中修改。

详细内存参数说明及设置过程参见Tomcat优化:内存参数详解及如何配置

华丹开发平台采用的jar文件及class并不是太多,一般不会产生OutOfMemoryError: PermGen space错误。