tomcat 服务器下内存溢出 Java heap space

JerryZhou_ 2010-11-14 07:20:18
tomcat 服务器下内存溢出 Java heap space 错误信息如下:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
root cause
javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.index_jsp._jspService(index_jsp.java:1337)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
root cause
java.lang.OutOfMemoryError: Java heap space
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.
--------------------------------------------------------------------------------
Apache Tomcat/6.0.14

以前放在Linux服务器下面没出现过这个问题;是不是winows服务器或者Tomcat有什么要配置的啊?
谢谢!~
...全文
727 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ren008598 2010-11-16
  • 打赏
  • 举报
回复
我同意11楼的说法。有一次我就是在代码中设置了缓存大小,上传的东西太大,超出了我设置的大小,又没作异常处理,而溢出的。。
你得先说说你是在做什么导致溢出。
  • 打赏
  • 举报
回复
OpenSessionInViewFilter 可以避免使用,在代码中用 LEFT JOIN FETCH 等将需要的数据全部查出,而不是跑到页面上再去查。

我不会 Hibernate,我想 Hibernate 就算有缓存也不至于导致 OutOfMemoryError 吧?
JerryZhou_ 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
堆内存溢出,这需要找原因的,并不是把 JVM 堆内存加大就能解决得了的。

原因可能出在这些上面:

1:查询时 SELECT 返回大量的数据,导致 JVM 堆内存耗尽;
2:我看你使用了 OpenSessionInViewFilter,这是个效率低下的做法,会导致数据库连接从请求直到响应完成都开着。

OutOfMemoryError 必须找出原因,否则把堆内存加到很大也是无济于事……
[/Quote]
再请教一下 这个和 Hibernate缓存有关系吗?
magicluo 2010-11-14
  • 打赏
  • 举报
回复
我觉得是楼主的代码的问题

请先锁定在什么情况下出现的这样的问题 先缩小模块 然后在持久层和业务逻辑层查找

出现这样的问题并不能简单的按照一楼楼主的做法那样修改配置文件,至少第一反应不该是如此。
O溺水的鱼0 2010-11-14
  • 打赏
  • 举报
回复
1.堆溢出的原因在于当前系统中new的对象太多了,系统中new的对象是存储在堆里的,像一些基本类型,如:int、float、double、char、long等类型是存储在栈中的,大部分产生堆溢出有2中可能
1)当前系统new对象太多,内存设置太小
2)系统有死循环,或者内存泄露等,产生出了太多了new的对象
2.可以google下如何解决,如果是linux环境下,利用kill -3 命令把当前的一些线程信息保存下来,再利用工具分析下。windows下时楼主可以google下,发散下对自己很有帮助。
JerryZhou_ 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]

[/Quote]
tomcat 的 bin 目录中 没有你说的catalina.bat文件呢
JerryZhou_ 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
堆内存溢出,这需要找原因的,并不是把 JVM 堆内存加大就能解决得了的。

原因可能出在这些上面:

1:查询时 SELECT 返回大量的数据,导致 JVM 堆内存耗尽;
2:我看你使用了 OpenSessionInViewFilter,这是个效率低下的做法,会导致数据库连接从请求直到响应完成都开着。

OutOfMemoryError 必须找出原因,否则把堆内存加到很大也是无济于事……
[/Quote]
谢谢您的建议,OpenSessionInViewFilter,这是个效率低下的做法 有什么可以取代这个的么?推荐一下 谢谢!
JerryZhou_ 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lanjut 的回复:]
是在../bin/目录下的catalina.sh文件
[/Quote]
我用的是Windows系统 谢谢
sound9world 2010-11-14
  • 打赏
  • 举报
回复
收藏下火大的回复。。
  • 打赏
  • 举报
回复
在 Linux 中在 catalina.sh 中加上

JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx512m"

-Xms 设置 JVM 的初始堆内存数
-Xmx 设置 JVM 的最大堆内存数
  • 打赏
  • 举报
回复
堆内存溢出,这需要找原因的,并不是把 JVM 堆内存加大就能解决得了的。

原因可能出在这些上面:

1:查询时 SELECT 返回大量的数据,导致 JVM 堆内存耗尽;
2:我看你使用了 OpenSessionInViewFilter,这是个效率低下的做法,会导致数据库连接从请求直到响应完成都开着。

OutOfMemoryError 必须找出原因,否则把堆内存加到很大也是无济于事。

Windows 中加大 Tomcat 内存的方法:

找到 tomcat 的 bin 目录中的 catalina.bat,在开始处加上一行:

set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m
lanjut 2010-11-14
  • 打赏
  • 举报
回复
是在../bin/目录下的catalina.sh文件
JerryZhou_ 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 majy 的回复:]
<Tomcat home>/conf/server.xml

有一个参数:
Maximum heap size

把这个参数设置大一点
[/Quote]
不好意思 我在conf下面没有找到有 Maximum heap size
这个参数的文件啊?
majy 2010-11-14
  • 打赏
  • 举报
回复
<Tomcat home>/conf/server.xml

有一个参数:
Maximum heap size

把这个参数设置大一点

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧