Tomcat reload memoryleak 错误描述
此现象发生在tomcat reload过程中多见。
我们的线上环境是使用jenkins远程部署,在部署重启中出现memory leak错误提示
环境:
tomcat7、jdk1.8
问题原因定位:
jvm默认定义了三种classloader,分别是bootstrap classloader、extension classloader、system classloader 。采用的是双亲委托机制进行加载。
tomcat7的加载模型如图
注意此处tomcat的类加载方式不完全遵循双亲委派模型,其中对于应用级别的加载各个web应用自己的类加载器(WebAppClassLoader)会优先加载,如果加载不到才走commonClassLoader走双亲方式。
当tomcat发生relaod的时候会执行org.apache.catalina.loader.WebappLoader下的backgroundProcess方法
public void backgroundProcess() {
if (reloadable && modified()) {
try {
Thread.currentThread().setConte