潜在的弹簧安全内存泄漏

Posted

技术标签:

【中文标题】潜在的弹簧安全内存泄漏【英文标题】:Potential spring security memory leak 【发布时间】:2018-10-11 00:38:13 【问题描述】:

我有一个使用 spring security core 3.1.1 并部署到 tomcat 实例的 grails 3.1.7 项目(不确定 tomcat 版本)。

日志中不时出现这一行:

2018 年 4 月 13 日 13:31:20.710 严重 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks Web 应用程序 [my-app] 使用 键创建了一个 ThreadLocal 类型 [java.lang.ThreadLocal] (值 [java.lang.ThreadLocal@6678f8db]) 和 type 的值 [org.springframework.security.web.firewall.FirewalledResponse](值 [org.springframework.security.web.firewall.FirewalledResponse@159982ef]) 但在 Web 应用程序停止时未能将其删除。线程 将随着时间的推移而更新,以尽量避免可能的记忆 泄漏。

我知道这是tomcats正常运行it checks for memory leaks时的一部分,似乎大多数人只是选择忽略它。这就是我们过去所做的。这次我们被告知要“修复它”,但鉴于泄漏的线程局部变量来自 Spring 安全类,我不确定要修复什么或如何修复它。

所以在我开始绕路尝试调试之前,有谁知道这里发生了什么?有没有其他人看过这个?它是良性的还是我需要做更多的挖掘?我应该告诉安全人员什么来说服他们忽略它?

任何帮助将不胜感激!

【问题讨论】:

JVM 上的内存泄漏通常是性能问题,而不是安全问题。搜索您的 Spring 版本的安全问题,看看是否存在类似问题。 @LuisMuñoz 产品是“弹簧安全”;我不认为 OP 试图报告安全漏洞。 @christopher-schultz 同意。 我在类似的场景中看到了同样的问题,因为 OP 描述说“当 Web 应用程序停止时”。在我的情况下,type 是另外一回事,因此它与在应用程序停止时未完全处理的 ThreadLocal 实例有关。 【参考方案1】:

事实证明,报告该错误的团队确实使用“kill -9”杀死了 webapp。在它之后清理tomcat是有道理的。

【讨论】:

以上是关于潜在的弹簧安全内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

潜在的内存泄漏 abaddressbookcopyarrayofallpeople( )

为啥.NET 没有内存泄漏?

iOS - XCode 4.4 - 使用分析的潜在内存泄漏

Tomcat 停止线程以避免潜在的内存泄漏

检测设备信息时的潜在内存泄漏

想知道我是不是有内存泄漏(报告为潜在)