Tomcat 8 内存泄漏

Posted

技术标签:

【中文标题】Tomcat 8 内存泄漏【英文标题】:Tomcat 8 memory leak 【发布时间】:2015-12-27 20:19:07 【问题描述】:

我正在使用 Spring/Spring Boot/mysql 开发 Java Web 应用程序并将其部署到 Tomcat 8。

在 Tomcat Web 应用程序管理器中,我单击 Reload 按钮,成功重新部署后 - Find Leaks 按钮并显示以下消息:

The following web applications were stopped (reloaded, undeployed), but their
classes from previous runs are still loaded in memory, thus causing a memory
leak (use a profiler to confirm):
/domain-api
/domain-api

我的 Tomcat 日志不包含有关可能的内存泄漏的消息..

现在我的应用程序(domain-api)的 2 个实例正在运行。如何检查它以及如何修复它?

【问题讨论】:

【参考方案1】:

这并不意味着您的应用程序存在内存泄漏。 tomcat 管理器中的消息只是意味着,仍然有一些来自先前部署的 Web 应用程序的类尚未被垃圾收集。

如果不是内存泄漏,则可以通过将 permGenSpace 设置为较低的值来消除此警告。这将在您重新部署应用程序后强制 GC 卸载所有类。

另一种确保您没有内存泄漏的方法是重新部署应用程序几次,然后创建一个 heapdump 并使用像 Eclipse Memory Analyzer 这样的分析器对其进行分析。您应该在那里寻找无法被垃圾回收的 WebappClassLoader 类型的实例。

【讨论】:

以上是关于Tomcat 8 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat Guice/JDBC 内存泄漏

怀疑 Jdbc 和 Tomcat 的内存泄漏

Tomcat 修复内存泄漏?

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

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

log4j2线程的Tomcat内存泄漏问题