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

Posted

技术标签:

【中文标题】Tomcat 停止线程以避免潜在的内存泄漏【英文标题】:Tomcat stopping a thread to avoid potential memory leaks 【发布时间】:2012-02-03 13:40:28 【问题描述】:

每次我开始调试我的 WebApp(Netbeans 7.0 + spring 3 + jsp)时,调试器在 Tomcat 引发此异常后会在 ThreadPoolExecutor.java 中中断几次:

“停止线程 http-bio-8080-exec-3 以避免在上下文停止后潜在的内存泄漏。”

我无法确定发生这种情况的原因。是因为我的代码有问题吗?如果是这样,我该如何定位问题?如果这是“正常的”,那么我该如何防止 IDE 每次都打扰我呢?

任何线索将不胜感激。

【问题讨论】:

我只在运行 Spring MVC 的 Eclipse 中得到确切的错误。你能解决这个问题吗? 我从来没有深究过这个。但是,我发现如何通过取消选中工具|杂项|Java 调试器|常规 (Netbeans) 中的“停止未捕获的异常”选项来忽略该问题。现在 Netbeans 从来没有打扰过我。有趣的是你也在使用 Spring。您是否在使用任何侦听器? 还没有。它是非常早期的由 Spring MVC 支持的 Ext-JS 前端 也看到这个问题与普通的 Eclipse Java EE IDE for Web Developers。版本:Kepler Service Release 1 Build id:20130919-0819。运行时:服务器版本:Apache Tomcat/7.0.47 服务器构建:2013 年 10 月 18 日 01:07:38 服务器编号:7.0.47.0 操作系统名称:Mac OS X 操作系统版本:10.9 架构:x86_64 JVM 版本:1.7.0_45-b18 JVM 供应商:甲骨文公司 为了记录,我最终发现了我插入的资源泄漏(数据库连接)并且不再发生上述异常。所以这个错误在我的代码中,而不是在 Netbeans 中。 【参考方案1】:

这看起来可能是 7.0.6 中修复的 Bug 49159 - Improve ThreadLocal memory leak clean-up 的一部分,但它是 Tomcat 7+ 中 MemoryLeakProtection 机制的一部分

这里发布了另一个答案Is this very likely to create a memory leak in Tomcat?,更详细地解释了这一点。

正如您在 cmets 中已经指出的,您可以使用 Tools|Miscellaneous|Java|Java Debugger|General (Netbeans) 禁用 NetBeans 中的调试器,并取消选择 stop on未捕获的异常复选框。

【讨论】:

仅供参考,错误 49159 已用 Tomcat 7.0.6 标记为已解决,但我运行此问题:服务器版本:Apache Tomcat/7.0.47 服务器构建:2013 年 10 月 18 日 01:07:38 服务器编号:7.0.47.0 操作系统名称:Mac OS X 操作系统版本:10.9 架构:x86_64 JVM 版本:1.7.0_45-b18 JVM 供应商:Oracle Corporation。但仅适用于 Web 开发人员的 Eclipse Java EE IDE。版本:Kepler Service Release 1 Build id:20130919-0819。

以上是关于Tomcat 停止线程以避免潜在的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

潜在的弹簧安全内存泄漏

Objective C:switch inside loop - 如何避免(潜在的)内存泄漏

停止/重新部署时 Tomcat 7+ 内存泄漏。弹簧数据,JPA,休眠,MySQL

正确配置 ActiveMQ 以避免 Producer 内存泄漏

石英:内存泄漏?

tomcat停止出现内存泄漏