测试好好的Tomcat Java Application,到了实际运行的时候,出现以下故障:
运行一段时间以后,访问所有网页返回错误:
2005-08-18 15:54:58 StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
java.lang.OutOfMemoryError
查了好久,分析原因如下:
保存到内存的数据量太大,造成Tomcat内存泄漏。
实际情况分析:
我的Application中使用ArrrayList来保存数据库,由于数据量限制在300以内,所以没有使用分页,在多人同时使用时,内存来不及释放,溢出。
解决办法:
1、修改代码,使用分页;
2、提高Tomcat使用的内存;
方法如下:
修改WEB服务器或应用服务器的虚拟机参数
java -Xms128M -Xmx128M ......
方法1操作步骤:
在catalina.bat文件中找到:doStart标签
在java命令后加上-Xms128M -Xmx128M就行了
方法2操作步骤:
run.sh 增加
JAVA_OPTS="$JAVA_OPTS -Xms256m ?CXmx800m -XX:PermSize=64m
-XX:MaxPermSize=512m"
run.bat增加
set JAVA_OPTS=Xms256m ?CXmx800m -XX:PermSize=64m
-XX:MaxPermSize=512m
其中的数字可以自己适当调节
解决方案2只是解决燃眉之急,方案1才是解决之道。