日期:2014-05-19  浏览次数:20680 次

J2EE 系统 outofmemory问题
大家好,这个系统采用了struts+spring+hibernate实现,其中主要的架构是,dao包括所有的数据访问方法,service包括所有的业务逻辑,action调用service方法,数据的传输通过dto来实现,
问题: 当tomcat一开始打开的时候,系统跑的非常的快,假设系统上面有两个链接,这两个链接都指向下面一个iframe,通过点击连接,来改变iframe里面的数据显示,一般(200~500)条,可是当我们测试的时候,如果我们频繁的点击这两个链接,(当点了一个连接后,还没有等数据出来,紧跟着又点击另一个链接,频繁的这样点,系统就会变的非常的慢,)而且tomcat的内存涨的非常的快,而且涨了上去的内存不会再下来,最后就会导致系统暂时崩溃,无法访问,有的时候会出现spring framework的org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext.xml]: Can't resolve reference to bean 'sessionFactory' while setting property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.OutOfMemoryError: Java heap space错误!不知道这是那一方面的原因,又有什么办法能够尽快的找出原因,用jprofiler进行了测试,没有发现没有回收的对象。
另外,调整tomcat的内存大小,可以延长系统的正常运行时间!
1 楼 anxin587 2007-03-29  
今天一直用jprofiler来跟踪,发现一个奇怪的问题,当tomcat刚打开的时候,内存用的比较小,可是当频繁的访问的时候,内存会急速上升,这也是正常的,可是为什么当我停止访问的时候,升上去的内存却回不到tomcat刚开始启动时候的大小阿,没有回收回来吗
2 楼 阳光晒晒 2007-03-29  
等四五小时再看,如果内存下来了
一般是由于数据库连接没关闭.
(如果你的数据库有超时关闭连接的话)
如果等四五小时还不下来,
可能是由于map或list交差引用了一个对象
可以手动垃圾回收语句收回内存

PS:网上这东西太多了你自己去找找