日期:2014-05-20  浏览次数:20702 次

Tomcat 内存溢出
服务器运行一段时间后就报这个
java.heap.space 
服务器上运行的是个网站 JSF写的网站..
只能重新启动TOMCAT 才行...
谁遇到过相似的问题? 帮忙分析分析


------解决方案--------------------
可能是你的某个程序运行时一次执行大容量的数据,而这些数据一次性被写到了内存。
比如从数据库中读取10w条记录,或者上传了一个几十M大小的文件,这个时候往往会导致内存溢出。

解决:
一、增加JVM堆设置

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。在JVM中如果Heap size 不足2%的时候将抛出此异常信息。

JVM在启动的时候会自动设置Heap size的值,Heap Size 最大不要超过可用物理内存的80%。

参数:-Xms64M -Xmx256M

tomcat

catalina.bat

中: set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx800M -XX:MaxPermSize=256M
实际数值根据的机器内存性能配置


二、程序优化
1、检测你的代码中是否存在一次性从数据库中读取10w条记录,优化数据的读取,如分批分页读
2、如果有上传文件功能,则控制文件的大小。