做项目时有个web页面导出excel功能,当导出数据量大约10万条时,后台程序就会报错:java.lang.OutOfMemoryError: Java heap space
查看网上做法说是需要修改tomcat的配置文件
1、在catalina.bat的第一行增加:
Java代码 :set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
在catalina.sh的第一行增加:
Java代码 :JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m,
2、Windows
在catalina.bat最前面加入set_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK JAVA设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为-Dcatalina.home="C:\ApacheGroup \Tomcat 5.0"-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"-Xrs加入 -Xms300m -Xmx350m
重起tomcat服务,设置生效
不过我在win10注册表中并没有找到相应配置。
最终解决方案:
配置MyEclipse中启动Tomcat时的jvm内存大小即可。参见下表