当前位置: 首页 > 面试题库 >

Tomcat 6内存泄漏日志条目

邓令
2023-03-14
问题内容

以下是我在CentOS机器上的Catalina.out文件中唯一条目的录入。我正在使用Spring 3和我的应用程序运行Tomcat
6。他们一整堆,所以我只是挑选了一些不断重复的东西。这并非一直发生,但至少每周发生一次。

问题是我该怎么做才能防止风箱发生?

Feb 3, 2011 2:37:48 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc

SEVERE: The web application [] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

Feb 3, 2011 2:37:48 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

SEVERE: The web application [] appears to have started a thread named [com.iteezy.shared.domain.DirEntry.data] but has failed to stop it. This is very likely to create a memory leak.


Feb 3, 2011 2:37:48 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named

[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] but has failed to stop it. This is very likely to create a memory leak.


Feb 3, 2011 2:37:48 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

SEVERE: The web application [] appears to have started a thread named [File Reaper] but has failed to stop it. This is very likely to create a memory leak.

Feb 3, 2011 2:37:48 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

SEVERE: The web application [] appears to have started a thread named [pool-1-thread-22] but has failed to stop it. This is very likely to create a memory leak.

37:48 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
b application [] appears to have started a thread named

[org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-2] but has failed to stop it. This is very likely to create a memory leak.

37:48 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap

b application [] created a ThreadLocal with key of type [net.sf.json.AbstractJSON$1] (value [net.sf.json.AbstractJSON$1@40bbb3d6]) and a value of type [java.util.HashSet] (value [[]]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

问题答案:

当您定义一个外部标志时,应该在设置 volatile标志的同时轮询该线程并退出该线程。否则,该线程可能永远不会看到其他线程所做的更改。

但是,标准API中已经有类似的功能-
它称为interrupt()方法和Thread.currentThread().isInterrupted()。无需重复已经存在的逻辑。请参阅:停止特定的Java线程。

话虽这么说,调用interrupt()每个线程也是一个坏主意,因为不能保证所有线程都会对此做出响应。检查您的异常情况后,我发现以下线程未正确清理:

  • com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0-关闭C3P0数据源。由于您使用的是Spring,因此只需添加destroy-method="close"。我们已经完成了这个线程。

  • File Reaper-据我所知,该线程是由FileCleaningTracker创建的。FileCleaningTracker.exitWhenFinished()关闭应用程序时(或者不再需要该类,我从没使用过)时,需要显式调用,或者让Spring进行此操作(请参见上文)。某些第三方库可能会使用它并且无法正确关闭-这意味着它存在错误。

  • pool-1-thread-22-这是ExecutorsUtility内部创建的线程之一ExecutorService。确保shutdown()在关闭过程中调用应用程序中的每个此类池。

  • org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-2-Quartz工作线程(实际运行作业的线程)。SchedulerFactoryBean自动为您关闭调度程序,我认为Tomcat错误在这里,我也经常看到此错误。不过貌似设置SchedulerFactoryBean.waitForJobsToCompleteOnShutdowntrue解决这个问题。

  • com.iteezy.shared.domain.DirEntry.data-我不确定这一点。它是您自己的线程需要在关闭时中断,还是H2数据库线程(?)需要检查其堆栈以猜测其来源。

底线是:不要仅仅杀死所有移动的内容(实际上,Tomcat在发出此警告之后会为您执行此操作),而是确定线程的来源,并使用特定close()于框架/库的方法来进行进一步清理。要温柔。



 类似资料:
  • 问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是

  • 问题内容: 我一直在追寻内存泄漏(由“ valgrind –leak-check = yes”报告),它似乎来自ALSA。这段代码已经存在于自由世界中一段时间​​了,所以我猜这是我做错的事情。 输出看起来像这样: 并继续一些页面 这是由于我在一个项目中使用ALSA并开始看到这种巨大的泄漏……或者至少是所说泄漏的报告。 所以问题是:是我,ALSA或valgrind在这里遇到问题吗? 问题答案: ht

  • 问题内容: 我有一个长时间运行的脚本,如果让脚本运行足够长的时间,它将消耗系统上的所有内存。 在不详细介绍脚本的情况下,我有两个问题: 是否有可遵循的“最佳实践”,以防止泄漏发生? 有什么技术可以调试Python中的内存泄漏? 问题答案: 看看这篇文章:跟踪python内存泄漏 另外,请注意,垃圾收集模块实际上可以设置调试标志。看一下功能。此外,请查看Gnibbler的这段代码,以确定调用后已创建

  • 本文向大家介绍Java 内存泄漏,包括了Java 内存泄漏的使用技巧和注意事项,需要的朋友参考一下 在Java中,垃圾回收(析构函数的工作)是使用垃圾回收自动完成的。但是,如果代码中有引用它们的对象怎么办?它无法取消分配,即无法清除其内存。如果这种情况一再发生,并且创建或引用的对象根本没有被使用,它们就会变得无用。这就是所谓的内存泄漏。 如果超过了内存限制,则程序将通过抛出错误(即“ OutOfM

  • 问题内容: 我使用Informix遇到了一个奇怪的问题(具体来说,我使用的是IBM.Data.Informix命名空间,即4.10 Client SDK)。我正在使用ODBC连接到IBM Informix数据库,并且遇到内存泄漏问题。该文档相当稀疏,并且我只能使用当前安装的驱动程序/ SDK。这是我用于数据库上下文的代码: } 我已尝试处置并关闭所有可以的连接,但这似乎无济于事。我是否缺少某些东西

  • 我们有一个基于go-socket.io(socket.ioGo语言实现)和大猩猩网络插座的网络插座服务,但是似乎有内存泄漏问题。即使我使用调试,HeapAlloc也总是在增加。FreeOSMemroy强制释放内存。 服务很简单。它将使用jwt令牌对传入请求进行身份验证,如果身份验证成功,则将创建一个go套接字。io conn基于gorilla websocket conn。但现在似乎是net/te