内存泄漏-度量 Jmeter 刻度线程和新I/O客户端工作线程

nhaq1z21  于 2022-09-27  发布在  Cassandra
关注(0)|答案(2)|浏览(210)

我正在运行spring mvc应用程序。当我关闭Tomcat服务器时,它显示

SEVERE: The web application [/myapp] appears to have started a thread named [metrics-meter-tick-thread-1] but has failed to stop it. This is very likely to create a memory leak.
SEVERE: The web application [/myapp] appears to have started a thread named [metrics-meter-tick-thread-2] but has failed to stop it. This is very likely to create a memory leak.

还有这个:

SEVERE: The web application [/myapp] appears to have started a thread named [New I/O client worker #1-3] but has failed to stop it. This is very likely to create a memory leak.

SEVERE: The web application [/anant] created a ThreadLocal with key of type [org.jboss.netty.util.CharsetUtil$2] (value [org.jboss.netty.util.CharsetUtil$2@5db3978d]) and a value of type [java.util.IdentityHashMap] (value [{UTF-8=sun.nio.cs.UTF_8$Decoder@39a2da0a}]) 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.

这个不知道哪个jar与e1d1e有关
当我研究jars依赖时,我发现有两个metrics-core jar:

metrics-core:2.2.0 (used by `datastax`)
metrics-core:3.0.1 (used by `Titan`)

我正在附加所有快照以使其更清晰。那么解决方案是什么????
我正在使用
第1页第1页


c1b1

cb1b3b1c

cld4siwp

cld4siwp1#

我知道我有点晚了。我也遇到了同样的问题,最终找到了解决办法。问题是,度量2.2 JAR(生成这些线程)使用了Oracle建议的ManagementFactory.getPlatformMBeanServer()方法。此类位于java.lang包中,因此它将由VM集中加载,而不是针对每个模块。因此,由于Metrics包只会在VM出口上自行关闭这些线程(通过添加关闭挂钩),因此加载此包的classloader会让通过包指定的MXBeans在模块卸载时停留。更糟糕的是,加载了war文件的classloader也将保持加载在VM上,这(可传递地)还将包括模块中加载的任何类和任何静态状态。
您可以手动调用Metrics.shutdown(),这有时可以解决问题。这个解决方案确实存在一些奇怪的问题(有时线程在此之后仍然存在,但我有一个非常特殊的设置,不想在这个问题上浪费更多时间)。

eni9jsuy

eni9jsuy2#

检查是什么启动了metrics meter tick thread*线程,无论是您的webapp还是一些库。并在关闭应用程序之前停止线程。请参阅Tomcat wiki link解释它如何创建内存泄漏。它还解释了未清理的ThreadLocal变量如何导致内存泄漏。

Web应用程序生成的线程

如果webapp创建线程,默认情况下,其上下文类加载器设置为父线程之一(创建新线程的线程)。在webapp中,此父线程是tomcat工作线程之一,其上下文类加载器在执行webapp代码时设置为webapp类加载符。
此外,派生线程可能正在执行(或阻塞)一些涉及webapp加载的类的代码,从而阻止收集webapp类加载器。
因此,如果在应用程序停止时未正确终止衍生线程,则webapp类加载器将泄漏,因为衍生线程持有强引用。

相关问题