spring 3.1,hibernate 4,tiles2,tomcat 7 - cleanup(多次部署导致内存泄漏)

25 浏览
0 Comments

spring 3.1,hibernate 4,tiles2,tomcat 7 - cleanup(多次部署导致内存泄漏)

我在使用spring、hibernate和tiles时似乎遇到了内存泄漏的问题。我认为这可能是由于我的应用在部署之间没有自我清理导致的。由于我目前正在学习所有这些框架,所以我经常进行部署和卸载。\n我应该在我的Web应用程序中做哪些清理工作?目前我什么都不做,因为我以为Java会自动进行内存清理,然而我很确定在Spring方面它并没有做到完全,因为Tomcat一直在抱怨permgen内存。\n我对是否需要运行某些方法以保持清洁感到困惑。我读到过一个Spring钩子,在某个地方注册应用程序,然后在关闭应用程序时进行适当的清理?不过我不确定在新版本的Spring(3.1)中是否需要类似的东西。\n例如,Tomcat一直告诉我我没有正确注销JDBC驱动程序(然而我认为如果检测到的话,Tomcat会自动完成这个操作)。\n我知道这是一个非常模糊的问题,但如果有人能提到一些需要做的事情,以防止我的应用程序泄漏,我可以自己搜索一下。\n谢谢!

0
0 Comments

这个问题的出现原因是在使用Hibernate的项目中出现的。Hibernate为每个使用的域对象生成代理。这些代理保存在Permanent Generation空间中,在应用程序重新启动/重新部署时不会被清理。PermGen空间使用的内存量默认相对较小,所以您可以尝试使用-XX:MaxPermSize Java参数来增加它。这可能会改善在出现内存错误之前的时间,但我不知道这个问题的完全解决方案。您最终将不得不重新启动tomcat本身。

对于jdbc问题,首先如果您手动使用连接,请确保在try catch finally块中正确关闭它。如果您不以这种方式使用连接对象,那么它可能再次与Hibernate有关。

是的,我已将maxpermsize参数增加到256mb。这有助于减少重启之间的时间,但我希望能有一种方式可以避免完全重新启动。另外,关于jdbc问题,我需要进一步研究一下。我对Hibernate不太熟悉,所以我不知道我是否需要自己处理这个问题,或者它是否会自动处理。我假设Hibernate会自动处理所有这些。

0
0 Comments

无论如何,在部署新版本之前,您都应该尽可能关闭正在运行的tomcat。

(这需要有两个tomcat和故障转移机制,或者您只接受服务停机时间比更新时间长一秒钟。)

据我所知,这是确保内存泄漏(考虑到perm gen)不会造成任何伤害的唯一方法。

原因:

- 多次部署导致内存泄漏

解决方法:

- 在部署新版本之前关闭tomcat

- 使用两个tomcat和故障转移机制

- 接受服务停机时间比更新时间长一秒钟

以上是关于spring 3.1, hibernate 4, tiles2, tomcat 7 - cleanup (multiple deploys causing memory leaks)问题的原因和解决方法。

0
0 Comments

近期在使用spring 3.1、hibernate 4、tiles2和tomcat 7时,遇到了一个内存泄漏的问题。经过调查发现,问题的出现是因为在hibernate 4.0中引入了jboss-logging作为依赖。具体的问题可以参考链接https://issues.jboss.org/browse/JBLOGGING-66。虽然目前还没有找到完全解决的方法,但是将jboss-logging jar文件移动到tomcat的lib目录中可以暂时解决这个问题。



    org.hibernate
    hibernate-core
    4.0.0.Final
    
        
            org.jboss.logging
            jboss-logging
        
    


    org.jboss.logging
    jboss-logging
    3.1.0.CR2



    org.springframework.web.util.Log4jConfigListener


    log4jConfigLocation
    /WEB-INF/log4j.xml


    log4jRefreshInterval
    10000



    
        
        
        
        
        
    



    
        
            /WEB-INF/tiles.xml
        
    


    
        org.springframework.web.servlet.view.tiles2.TilesView
    
    



    org.apache.tomcat
    tomcat-juli
    7.0.76
    provided


WEB-INF/web.xml



    false



    
    

0