Tomcat 8 内存泄漏

Tomcat 8 memory leak

我正在使用 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 日志不包含有关可能的内存泄漏的消息..

看起来我现在有我的应用程序的 2 个实例(域-api)和 运行..如何检查它以及如何修复它?

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

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

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