在用J2EE开发办公型企业的MIS系统,前期系统运行良好,最后版本发布之后,当天无事,第二天客户报无法登录,登录远程服务器查看tomcat日志,发现了out of memory;首先考虑内存泄漏,去除所有的不可达变量、检查资源释放点,再次发布,还是无法解决。由于系统使用了spring+struts+hibernate,决定查看内存占用情况,监测tomcat的内存使和情况,发现使用量过大,检查spring,把所有不需要的单态实例,再次发布,经过强度测试,没发现问题。
两个月之后,又产生了一次outofmemory,决定扩大tomcat的JVM内存,使用以下方法,达到目的:
两种方法:
1. 就需要在环境变量中加上TOMCAT_OPTS, CATALINA_OPTS两个属性,
如 SET CATALINA_OPTS= -Xms64m -Xmx512m;
ms是最小的,mx是最大,64m, 512m分别是指内存的容量.
2. 修改Catalina.bat文件
在166行“rem Execute Java with the applicable properties ”以下每行
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% 中的%CATALINA_OPTS% 替换成-Xms64m -Xmx512m