【问题标题】:Vaadin application creates threads that leads to memory leaksVaadin 应用程序创建导致内存泄漏的线程
【发布时间】:2012-10-18 13:57:56
【问题描述】:

我的 Vaadin 应用程序有问题,它创建了一些线程,而 Tomcat 说它们可能导致内存泄漏问题。 我不会以显式方式创建线程。

SEVERE: The web application [/MyApp] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.
ott 29, 2012 9:52:00 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks

和:

SEVERE: The web application [/MyApp] created a ThreadLocal with key of type [org.apache.axiom.util.UIDGenerator$1] (value [org.apache.axiom.util.UIDGenerator$1@1f7b22b]) and a value of type [org.apache.axiom.util.UIDGeneratorImpl] (value [org.apache.axiom.util.UIDGeneratorImpl@d25438]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
ott 29, 2012 9:52:00 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [/MyApp] created a ThreadLocal with key of type [org.apache.axiom.util.UIDGenerator$1] (value [org.apache.axiom.util.UIDGenerator$1@1f7b22b]) and a value of type [org.apache.axiom.util.UIDGeneratorImpl] (value [org.apache.axiom.util.UIDGeneratorImpl@975b37]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.

这让应用非常不稳定。

在开发过程中,这是我第一次遇到此错误。

如何避免这些问题?

【问题讨论】:

    标签: tomcat memory-leaks threadpool vaadin catalina


    【解决方案1】:

    这些问题都与 Vaadin 无关。

    您(或您正在使用的库)已创建 java.util.Timer,但尚未取消它。

    此外,“Threadlocal”问题似乎是由 Apache Axiom 引起的,并且似乎在 Axiom 1.2.12 中得到了修复(参见 http://ws.apache.org/axiom/http://ws.apache.org/axiom/

    【讨论】:

    • 也许是一个图书馆,而不是我。如何找到创建该线程的库?可以是 Vaadin 来创建那个线程吗?感谢您的公理建议
    • 恐怕没有简单的方法可以找到可能创建了计时器的库。您可以通过将您自己的 java/util/Timer 调试版本放入 WEB-INF/classes 并在构造函数中抛出 RunTimeException 来做一些令人讨厌的 hacky 工作 - 但这是我能想到的全部。
    • 好吧,也许是 Vaadin 创造了一些东西。现在我将尝试新的 Axiom 的库来检查我是否至少可以避免第二个错误。谢谢。
    • 没什么,公理也有同样的问题。我导入了新库,但抛出了同样的错误。
    • 我刚刚搜索了 Vaadin 6.7.6 的源代码,它确实不会创建任何服务器端 Timer 线程。 (我同时使用 Tomcat 和 Vaadin,从未见过“启动了一个名为 [Timer-0] 的线程”问题。)这是 Axiom 错误报告:issues.apache.org/jira/browse/AXIOM-354。它与您提到的问题相同。你确定你从你的 web 应用程序中删除了旧的 jar 包吗?
    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 2011-09-23
    • 2021-02-25
    • 1970-01-01
    • 2019-10-21
    • 2022-11-06
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多