场景回放
- 线上代码与开发环境代码一致
- 线上jdk版本与开发环境一致,jdk8
- 线上tomcat版本与开发环境一致,tomcat8
尝试解决
- 重启tomcat
- 更换tomcat,启动tomcat
- 重启vm
总结
多次验证下来几近奔溃,然后突然想到去年logback依赖引发的一个悲剧,然后就到webapps下项目的WEB-INF/lib下找找有没有类似"slf4j-log4j12-x.jar"的jar包,不找不知道,一找吓一跳,就是你,rm -f slf4j-log4j12-*,重启tomcat,解决
引发的悲剧
log4j-over-slf4j和slf4j-log4j12冲突,两个jar包会循环引用导致内存溢出。解决的办法就是将两个jar包其中一个的依赖移除掉。
解决方案
# projectName为你项目的名称
cd /tomcat/webapps/projectName/WEB-INF/lib
ls slf4j-log4j12-*
rm -f slf4j-log4j12-*
# 杀死tomcat
for i in `ps aux|grep tomcat|grep -v grep|awk '{print $2}'`;do kill -9 $i;done
# 启动tomcat
/tomcat/bin/startup.sh