我正在使用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)启动并运行..如何检查它以及如何解决它?
答案 0 :(得分:0)
这并不意味着您的应用程序存在内存泄漏。 tomcat管理器中的消息意味着,仍然有一些来自先前部署的Web应用程序的类尚未被垃圾回收。
如果它不是内存泄漏,则可以通过将permGenSpace设置为较低的值来删除此警告。这将强制GC在您重新部署应用程序后卸载所有类。
确保您没有内存泄漏的另一种方法是重新部署应用程序几次,然后创建一个heapdump并使用Eclipse Memory Analyzer等分析器对其进行分析。在那里,您应该查找无法进行垃圾回收的WebappClassLoader
类型的实例。