遇到java.lang.OutOfMemoryError: Java heap space问题【持续跟踪中...】

昨天下午app服务端无缘无故又502错了,我打开tomcat 日志:

INFO: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: inited with 15 rules

Mar 17, 2016 5:50:42 PM org.apache.catalina.core.ApplicationContext log

INFO: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: conf is ok

Mar 17, 2016 5:50:42 PM org.apache.catalina.core.ApplicationContext log

INFO: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: loaded (conf ok)

Mar 17, 2016 5:50:42 PM org.apache.catalina.core.StandardContext reload

INFO: Reloading Context with name [] is completed

Mar 17, 2016 11:04:22 PM org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor run

SEVERE: Unexpected death of background thread ContainerBackgroundProcessor[StandardEngine[Catalina]]

java.lang.OutOfMemoryError: Java heap space

查看了下网上大致有一种思路:

在tomcat/bin/catalina.sh最前面加入:set JAVA_OPTS=-Xms384m -Xmx384m

这两个参数根据实际内存大小来设置

我以前优化服务器的时候已经做过设置,现在看来这招是不是还能管用?

我linux服务器上以前做过的配置

JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m -XX:-UseGCOverheadLimit"

我尝试着再调大点,观察两天看看。

以下为修改过后

JAVA_OPTS="-server -Xms1524m -Xmx1524m -Xss1524K -XX:PermSize=712m -XX:MaxPermSize=2048m -XX:-UseGCOverheadLimit"

1.再回过头来看看我们的项目现在用的hibernate,我有点感觉是这里出了问题,hibernate用好了非常方便,用不好,各种问题, 我觉得是hibernate缓存bean造成

jvm 内存不够 ,不是没这种可能

2.使用Spring+Hibernate从数据库中读取大量数据,使用了单例模式的AppContext的getBean,内存中缓存了大量的Entity Bean

注意:只有startup.bat启动tomcat,设置才能生效,如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了,

就是说set JAVA_OPTS=-Xms384m -Xmx384m没起作用