2

ThreadLocal 会像在 Tomcat 中泄漏一样导致 Glassfish 服务器中的内存泄漏吗?为什么? http://wiki.apache.org/tomcat/MemoryLeakProtection

4

2 回答 2

1

是的,它会泄漏,根据这个相对较新的 Glassfish JIRA 问题,Glassfish 甚至不会警告您:

http://java.net/jira/browse/GLASSFISH-14128

然而,需要说明的是,特定于 ThreadLocal 的泄漏不是应用程序/Web 服务器本身的“错误”,而是在这些容器中运行的组件中的代码问题(无论这些组件是 servlet、会话 bean 还是其他)。

应用服务器/Web 容器一般尝试做的是保护开发人员免于编写大量维护代码,并使他专注于业务逻辑。然而,他需要对应用程序服务器的工作方式(线程池、类加载器、部署/取消部署机制,...)有所了解,以便正确完成或避免此类 ThreadLocal 问题。这并不总是那么容易,而且可能非常棘手。我记得在 Glassfish 中阅读过有关内存泄漏问题的信息?与使用自定义日志级别有关。

Apache Tomcat 所做的是它有一个辅助机制来警告用户/处理用户代码中一些常见的内存泄漏问题。但即使在问题中提供的链接中,您也可能会读到并非所有可能的 ThreadLocal 内存泄漏都是使用此机制自动完成的。

Glassfish 似乎还没有这个附加功能。

于 2011-10-27T16:44:23.030 回答
0

这个问题会导致各种各样的问题。我不久前发布了它

我需要使用 MAT 查找内存泄漏的帮助

我们自己手动释放对象。我想我在 GF 错误列表中看到这已在 3.1x 版本中得到修复。

于 2011-10-27T17:27:33.757 回答