服务器2G内存,访问量目前不是很大,同时访问可能还不过百人吧
不过偶尔就出现了java.lang.OutOfMemoryError这个问题,一般服务器自己能缓过来
不过今天居然死掉了错误提示如下:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Java heap space
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.login_jsp._jspService(org.apache.jsp.login_jsp:464)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.OutOfMemoryError: Java heap space
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.我搜了一下关于这方面的帖子,一般都建议给heap空间设置大一些
但是我更想知道什么原因让内存这么快就溢出了
说明一下,数据库的连接用完以后都关闭了,所以这个造成的溢出可能性不大还有就是我如果在tomcat中设置的话
Inital memory pool和Maximum memory pool应该设置多少才算合适

解决方案 »

  1.   

    服务器就是有40G的内存也没用的,关键看你分配给JVM多少内存,一般的项目分配512M--1024M的内存应该合适了,如果你觉得不够,可以再加,但一般不能超过2G数据库连接难道你没用数据库连接池吗?
      

  2.   

    to: miaoliujun(傲龙) 
    数据库用的是连接池,系统大体是这样的,每个产品用户都会给其建立一个独立的数据库
    里面包括一个即时对话功能,对话消息内容是直接传到数据库中的,而且当时设计的时候,消息框是每几秒自动刷新的
    会不会是因为这个原因,造成数据库并发操作次数太多,然后就内存溢出了
      

  3.   

    to: miaoliujun(傲龙) 
      数据库用的是连接池,系统大体是这样的,每个产品用户都会给其建立一个独立的数据库
      里面包括一个即时对话功能,对话消息内容是直接传到数据库中的,而且当时设计的时候,
      消息框是每几秒自动刷新的
      会不会是因为这个原因,造成数据库并发操作次数太多,然后就内存溢出了
      
    我觉得有一定道理,以前也遇到过这类问题,当时主要是数据链接没有关闭导致,处理结果是将一些链接请求在完毕后,关闭数据库的connection。
    现在我采用了spring来管理事务,自动实现这些事务管理功能。不用担心这些问题。
      

  4.   

    Spring可不是万能的,具体的事务管理还是建议自己来写最好。