我正在使用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
类型的实例。