背景:
- centos下,基本使用sh shutdown.sh 重启tomcat
- 内测阶段,频繁发布代码、重启tomcat,持续2-3天后,服务器8G内存耗尽;
分析 - 按名称检查进程情况:
ps -ef|grep tomcat01
,存在多个java进程; - 直接原因:tomcat对应的java进程未随web容器关闭而销毁,进而存在僵尸java进程;
- 底层原因:有非守护线程存在,jvm不会退出;
解决方法:
- 退出时强制关闭tomcat进程:启动时记录pid,退出时强制关闭;
==============================bin/shutdown.sh
exec "$PRGDIR"/"$EXECUTABLE" stop -force "$@" #加上 -force
==============================bin/catalina.sh
在PRGDIR=
dirname "$PRG"后面加上
if [ -z "$CATALINA_PID" ]; then
CATALINA_PID=$PRGDIR/CATALINA_PID
cat $CATALINA_PID
fi
- 手动批处理,按名称
ps -ef|grep tomcat_2|awk '{print $2}'
kill -9 ``