轉自:
http://my.oschina.net/yongyi/blog/405198
問題分析
這個在windows下沒有碰到過,因為此前跑Tomcat都是以服務而不是命令腳本的形式跑的,而且已經換了一個項目,所以暫時不考察windows下是否存在該問題。
難道是Tomcat版本問題?或者用帶內存泄漏保護的Tomcat 7可以解決該問題?嘗試將web應用跑在apache-tomcat-6.0.18、apache-tomcat-6.0.35、apache- tomcat-7.0.34,發現均存在無法shutdown.sh進程問題。
難道在CentOS(Linux)下,Tomcat無法用shutdown.sh停掉進程?顯然不可能的。於是又把web應用從webapps中移走,換 回tomcat自帶的ROOT,果然啟動后再shutdown.sh,查找不到原來的tomcat進程了,也就證明了是自己web應用的問題了。
解決方案
現在已經確定是web應用的問題了,所以可以提解決方案了。
Kill進程,修改tomcat bin目錄下shutdown.sh和catalina.sh文件
忽略日志中的嚴重警告,因為這是關閉tomcat時候引起的,正常情況下不會發生這種內存泄露情況,而且Tomcat6.18以上版本的Tomcat已經 做了內存泄露保護,交給Tomcat完成吧,我們只需要在shutdown.sh之后,補上一個kill -9 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