tomcat6:停止时内存泄漏

时间:2014-03-10 21:27:01

标签: apache tomcat memory-leaks

每当我停止tomcat6时,我都会遇到内存泄漏。这是来自我的catalina.out:

Mar 10, 2014 5:21:01 PM org.apache.coyote.http11.Http11Protocol pause
INFO: Pausing Coyote HTTP/1.1 on http-8080
Mar 10, 2014 5:21:02 PM org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
17:21:02,852  INFO XmlWebApplicationContext:696 - Closing org.springframework.web.context.support.XmlWebApplicationContext@1ba6b028: display name [WebApplicationContext for namespace 'documation-servlet']; startup date [Mon Mar 10 17:17:34 EDT 2014]; parent: org.springframework.web.context.support.XmlWebApplicationContext@57af0af7
17:21:02,853  INFO DefaultListableBeanFactory:282 - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@fb7f97b: defining beans [propertyConfigurer,methodNameResolver,exportController,managerController,urlMapping,viewResolver]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@2e2e1b6c
17:21:02,938  INFO XmlWebApplicationContext:696 - Closing org.springframework.web.context.support.XmlWebApplicationContext@57af0af7: display name [Root WebApplicationContext]; startup date [Mon Mar 10 17:17:28 EDT 2014]; root of context hierarchy
17:21:02,938  INFO DefaultListableBeanFactory:282 - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2e2e1b6c: defining beans [propertyConfigurer,documationDataSource,upsDataSource,securityFilter,documationXactionManager,aclService,libraryService,librarySearchService,inspectionService,approvalService,resourceMgr,zkService,mailerService,libraryServiceTX,librarySearchServiceTX,zkServiceTX,approvalServiceTX,inspectionServiceTX,aclServiceTX,appCacheManager,methodCachingAdvice]; root of factory hierarchy
17:21:02,939  INFO EhCacheManagerFactoryBean:143 - Shutting down EHCache CacheManager
Mar 10, 2014 5:21:02 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named [Timer-2] but has failed to stop it. This is very likely to create a memory leak.
Mar 10, 2014 5:21:02 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named [Resource Destroyer in BasicResourcePool.close()] but has failed to stop it. This is very likely to create a memory leak.
Mar 10, 2014 5:21:02 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named [Resource Destroyer in BasicResourcePool.close()] but has failed to stop it. This is very likely to create a memory leak.
Mar 10, 2014 5:21:02 PM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080

我正在为我的应用程序使用spring框架和zk框架。知道是什么原因引起的吗?

3 个答案:

答案 0 :(得分:2)

与@Garreth所说的相反,你很可能有内存泄漏。如果您从未重新部署tour Web应用程序并始终在部署之间关闭JVM,那么它可能根本不会产生任何影响。但是有一个可重新部署的Web应用程序很好,对吧?

您有一个或多个组件在某些时候启动线程但没有清理它们。通过查看您自己的代码以及您正在使用的任何库提供的类,您可以快速找到BasicResourcesPool

Timer-2更难以追踪,因为它具有通用名称。

如果您有机会附加分析器,则可以跟踪对象和/或线程创建,并查看正在启动这些线程的组件。无论启动那些有问题的组件的任何组件(监听器,servlet等)都需要在取消部署应用程序时正确关闭它们。请考虑使用Servlet.destroyServletContextListener.contextDestroyed执行此类清理操作。

答案 1 :(得分:0)

Tomcat对内存很偏执,并经常警告潜在的内存泄漏。警告说你“可能”导致泄漏,而不是你肯定有泄漏。

您需要跟踪服务器上的内存使用情况,看看您是否确实有泄漏。请注意,运行Tomcat的JVM将占用给定服务器上的大部分内存,并在需要时分配给其他进程。因此,如果您拍摄快照并且看到您的服务器具有非常少的“空闲”内存,请不必担心。

如果您的应用程序向垃圾收集不清除的内存提交内容,则会发生泄漏,因为它标记为非删除。

要公开它,请跟踪tomcat用户正在使用的内存。

ps -u tomcat u | awk '{sum +=$4}; END {print sum}'

将告诉您tomcat用户保留的可用内存百分比。

答案 2 :(得分:0)

我不知道“ Timer-2”,但是“ BasicResourcePool.close()中的资源销毁程序”是由c3p0连接池的close方法启动的线程。它会执行一些清理操作,并在工作完成后自然终止,因此您不必担心这里会发生真正的内存泄漏。 另一方面,如果“ Timer-2”是一个守护进程线程(通过名称判断,很可能是这种情况),那么有必要研究一下为什么它在应用程序关闭时没有停止的问题。