我最近参与了一个项目,但并未参与实现 Netflix-Zuul 过滤器。我不太确定要包括什么,团队的其他成员也不熟悉 Zuul。
在我们的开发服务器上部署之间关闭时,catalina 日志中的消息存在一些问题。到目前为止,我一直无法找到有关此消息的含义或从哪里开始解决它的任何指导。感谢任何指导,因为我们担心这将是一个可扩展性问题。请让我知道我可以提供哪些可能有助于追踪此问题的额外信息。
Jun 19, 2018 4:46:43 PM org.apache.catalina.loader.WebappClassLoaderBase checkThreadLocalMapForLeaks
SEVERE: The web application [studentApp] created a ThreadLocal with key of type [com.netflix.zuul.context.RequestContext$1] (value [com.netflix.zuul.context.RequestContext$1@59d4a2ba]) and a value of type [com.netflix.zuul.context.RequestContext] (value [{}]) 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.
最佳答案
在代码的某处,正在创建一个 ThreadLocal。听起来它正在存储 RequestContext 以便其他一些代码可以在不将其作为参数的情况下获取它。这可能不是一个理想的方法,但有时我们会做坏事来按时完成事情。
如果这是在我工作的应用程序的日志中,我会开始搜索 ThreadLocal 的创建位置。根据日志消息,我会开始寻找:
new ThreadLocal<RequestContext>
在你的代码中的某处。然后你需要弄清楚它指的是什么,也许当你不再需要它时找个地方调用它的 remove() 。例如,可能有代码在处理请求时设置它,而不是在请求处理结束时将其删除。
关于spring - Netflix-Zuul 使用 RequestContext 过滤器挥之不去的 ThreadLocal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936898/