一尘不染

Guice + Tomcat潜在的内存泄漏

tomcat

我刚刚开始在Tomcat web应用程序中使用Google Guice,并且每当取消部署WAR文件时,在catalina.out文件中都会注意到以下内容:

May 16, 2011 5:37:24 PM org.apache.catalina.startup.HostConfig checkResources INFO: Undeploying context [/app]

2011年5月16日下午5:37:24 org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads严重:一个Web应用程序似乎已启动一个名为[com.google.inject.internal.util。$
Finalizer]的线程,但未能成功停下来。这很可能造成内存泄漏。

2011年5月16日,下午5:37:24 org.apache.catalina.loader.WebappClassLoader
clearThreadLocalMap严重:一个Web应用程序创建了一个ThreadLocal,其键类型为[null](值[com.google.inject.internal.InjectorImpl$1@10ace8d
])和类型为[java.lang.Object []]的值(值[[Ljava.lang.Object; @
7e9bed]),但在Web应用程序停止时无法删除它。为了防止内存泄漏,已将ThreadLocal强制删除。

有谁知道是什么原因造成的,或者我如何阻止它的发生?

我只按照这里的说明操作 http://code.google.com/docreader/#p=google-guice&s=google-
guice&t=ServletModule

…并且尚未对其进行任何幻想。我只有2个servlet和一个过滤器。

谢谢!


阅读 258

收藏
2020-06-16

共1个答案

一尘不染

如果您在关闭Web应用程序时遇到了这个问题,我不会太担心。此类型的应用程序资源泄漏。关机很常见。当您频繁进行热部署(即多次取消部署而不杀死JVM)时,它们确实会成为问题,但是当完成冷部署时(取消部署/部署是在杀死JVM之前完成的,则不会出现问题)重新部署)。

一种常见的策略是在开发过程中进行热部署(因为它们通常比冷部署要快),并且仅在资源泄漏开始影响性能时才进行冷部署。然后,在生产中,对每个部署进行冷部署。鉴于存在这种类型的泄漏的代码/库的数量,试图消除它们很困难。

2020-06-16