Tomcat版本: apache-tomcat-8.0.21
操作系统: Ubuntu
Java版本: 8
工具: VisualVM
在启动tomcat时,驻留内存使用量以mbs开始,达到大约6-7gb(10gb虚拟内存)。堆只有700mb左右。
我的理解是每个Web应用程序只有一个关联的WebAppClassLoader
。
我们有12个Web应用程序,包括docs examples等。我使用VisualVM工具进行分析,发现在探查器和heapdump中有29个org.apache.catalina.loader.WebappClassLoader
个实例。
启动tomcat时,它以12个org.apache.catalina.loader.WebappClassLoader
个实例开始,但逐渐增加实例数,并且内存使用量(元空间)也增加,之后tomcat因Caused by: java.lang.OutOfMemoryError: Metaspace
而崩溃。我们还没有定义元空间限制。我们没有做任何重新加载webapp操作。
为什么org.apache.catalina.loader.WebappClassLoader
的实例数会增加?
我怀疑可能是classloader泄漏并找到了这个link? 但我无法找到WebAppClassLoader的实例,其属性已启动为false。
关于内存泄漏,堆内存变化不大,并且在可接受的范围内。