前几天做了一个关于房屋出租的网站,用的是ibatis+struts+spring ,几个表要关联时用到了jdbc(感觉jdbc灵活些),我是继承的SqlMapClientDaoSupport类,然后用getSqlMapClientTemplate()访问的,jdbc的数据库连接都是关了的。ibatis交给spring处理的。前几天虚拟主机的管理人员叫我升级说内存少了,我就升级 ,现在级也升了,网站访问量也不大,为什么老是报内存溢出呢?
请高人给我分析下,以下是错误提示!
org.apache.jasper.JasperException: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nested exception is java.lang.OutOfMemoryError: Java heap space
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
org.apache.jsp.index_jsp._jspService(index_jsp.java:97)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
com.fwcz.filter.Character.doFilter(Character.java:23)
root cause org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nested exception is java.lang.OutOfMemoryError: Java heap space
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:385)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:313)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:290)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:131)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:147)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:173)
org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:112)
org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:79)
org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:101)
org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:389)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:324)
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:122)
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:66)
com.fwcz.taglib.ShowArticle.doEndTag(ShowArticle.java:39)
org.apache.jsp.public_.right_jsp._jspx_meth_article_005fshow_005f0(right_jsp.java:143)
org.apache.jsp.public_.right_jsp._jspService(right_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
org.apache.jsp.index_jsp._jspService(index_jsp.java:97)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
com.fwcz.filter.Character.doFilter(Character.java:23)

解决方案 »

  1.   

    自己写的话,看看那些从数据库读取的内容有没有及时的去掉,或者还在引用中,希望你不是把那些东西放在 session中
      

  2.   

    你配置的内存是多大? -Xmx 这个参数。如果已经很大,比如32位机器有1.2G以上,那么只有2个可能了
    1 有内存泄漏,或者使用了太占用内存的算法。
    2 你的应用太大了,比如并发太高
      

  3.   

    不是框架的事,那块程序的问题,用JProfile看一下,就知道 了。
      

  4.   

    你的applicationContext.xml中注入的类有多少?是不是你的工程需要注入的东西太多。
      

  5.   


    你用jstat观察一下,然后把观察内容记录下分析一下内存变化情况。
      

  6.   

    首先保证程序是没什么问题的;
    其次,
    服务器用的Tomcate?在部署上面要优化下,比如 Apache + Tomcate, 搞个集群。
      

  7.   

    java.lang.OutOfMemoryError: Java heap space 内存泄漏(溢出)解决方法(二)
       java.lang.OutOfMemoryError: Java heap space 解决方法
            我在这里先说解决方法,先帮助大家解决问题,再来看原因。这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
    1.可以在windows 更改系统环境变量
             加上JAVA_OPTS=-Xms64m -Xmx512m
    2,如果用的tomcat,在windows下,可以在C:\tomcat5.5.9\bin\catalina.bat  中加上:
             set JAVA_OPTS=-Xms64m -Xmx256m
    位置在: rem Guess CATALINA_HOME if not defined  这行的下面加合适.
    3.如果是linux系统 Linux  在{tomcat_home}/bin/catalina.sh的前面,加
              set JAVA_OPTS='-Xms64 -Xmx512'   更多的信息 :请到Java乐园 查看  http://www.javaly.cn
      

  8.   

      补充下: http://www.javaly.cn/javahome/java/content.detail/java.lang.OutOfMemoryError:%20Java%20heap%20space%20%20%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%EF%BC%88%E6%BA%A2%E5%87%BA%EF%BC%89%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95(%E4%BA%8C)/fdc1ed6c2176d968012177137d340008.faces
       这个是原文章
       有问题,可以到Java乐园群:15651281
      

  9.   

    http://topic.csdn.net/u/20090626/11/cc4c0fc6-44c5-4a94-bc1a-b076b070b4e6.html 连接中贴了部分代码!
      

  10.   

    内存溢出本就不好找原因, 你按照 kokobox 的方式看下内存的变化情况吧
      

  11.   

    看看你的页面上有没有用到struts2.0的标签<s:/head>,如果有的话,去掉试试
    我上次就遇到这个内存溢出这个问题,找了两天才发现是多写了<s:/head>标签,去掉后就OK啦!
      

  12.   

    我也碰到了和楼主一样的问题,最后使用了JProfiler工具,发现内存不回收,是被首页没有释放。
    最后才发现首页里特殊处理的问题。由于没有走action而是首页里直接调用的spring上下文调用的方法不对,
    致使每次访问都初始化一次spring。这样访问一会肯定挂。改成了从web容器中获取就好了。
      

  13.   

    是session 获得或者是session没有及时关闭。
      

  14.   

    我是用的request.setAttribute("value",value);
    我是用的这个,不会是这个的原因吧
      

  15.   


    大哥,你这个value会随着程序的运行而膨胀吗?不是的话就没关系。别人都说了很多了,一句话,你的资源请求太多,释放太少。具体原因你得自己找,我猜一猜,如果你用的不是getCurrentSession()的话,那么这个session在提交后是不会被释放的,一来二去只有session被打开,没有session被释放,你的程序必死无疑。