一尘不染

线程池中的线程本地内存泄漏

tomcat

我在Tomcat中遇到线程本地内存泄漏错误,并且正在使用ThreadPool,但在我的webapp中没有ThreadLocal的实现。

严重:Web应用程序[/ myWebApp]创建了一个ThreadLocal,其密钥类型为[org.a
pache.http.impl.cookie.DateUtils $ DateFormatHolder $
1](值[org.apache.http.imp l.cookie.DateUtils $ DateFormatHolder $ 1 @
4c2849]和类型[java.lang.re
f.SoftReference]的值(值[java.lang.ref.SoftReference@1e67280]),但是在Web应用程序停止时无法删除它。线程将不断更新,以尝试避免可能的内存泄漏。

我不明白的是,为什么我没有实现它,但仍收到线程局部错误?我想,所以我在网上搜索,摆脱这些消息,并在这里它被写入,为了清理ThreadLocal的我需要使用:

ThreadLocal.remove()

但是我没有ThreadLocal的实现。如果有人向我展示一种方法,我将不胜感激。


阅读 665

收藏
2020-06-16

共1个答案

一尘不染

显然, 事情 是创建/那些ThreadLocal的实例。如果不是您的代码,则它必须是您正在使用的某个库,或者(可能是)Tomcat本身。

我将从研究可能正在创建的实例开始

    org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1

DataUtils顺便说一下,这是嵌套类中的一个匿名类,因此,除非发生怪异的事情,否则创建将在DateUtils.java文件中进行。)

如果检查源代码无济于事,请尝试调试Tomcat实例并在ThreadLocal构造函数上设置断点。

2020-06-16