1. 程式人生 > >linux環境中關閉tomcat,通過shutdown.sh無法徹底關閉--線程池

linux環境中關閉tomcat,通過shutdown.sh無法徹底關閉--線程池

text str 網上 問題思路 綜合 pri src size ==

  最近測試環境上測試的項目通過shutdown.sh始終無法徹底關閉。

  之前臨時解決方法兩種:

  第一:通過ps -ef|grep tomcat查看到tomcat的進程直接使用kill來殺死進程。

第二: 基本原理為啟動tomcat時記錄啟動tomcat的進程id(pid),關閉時強制殺死該進程

1.找到tomcat下bin/catalina.sh文件,vi進去添加點東西,主要是記錄tomcat的pid,如下:

技術分享圖片  

大概在第125行左右,添加如下代碼

#設置CATALINA_PID(後加)
if [ -z "$CATALINA_PID" ]; then
CATALINA_PID=$PRGDIR/CATALINA_PID
cat $CATALINA_PID
fi

保存即可。

2.vi進shutdown.sh文件,在最後一行如下紅圈-force:

技術分享圖片

保存即可.

  但是始終未解決根本問題。查找問題思路:通過java自帶的工具jps或者linux自帶命令查找線程。這裏直接使用jps。找到線程

再執行jstack pid,出現錯誤類似這樣

技術分享圖片

方法一:從tomcat下項目入手,一般造成這種原因是因為項目中有非守護線程的存在。那麽怎麽找到改線程呢,請看下面:

利用jdk 提供的jstack可以幫助我們找到: $JAVA_HOME/bin/jstack <pid> pid是指進程ID, 用ps -ef|grep tomcat 就可以查看到: 技術分享圖片

12126即為pid,繼續輸入jstack 12126會看到如下一堆東西:

技術分享圖片

技術分享圖片

還有一堆的線程池錯誤信息,上面截圖是抄網上其他朋友們的,但是這堆信息和我差不多,。線程無法停止。再綜合考慮code,發現code再關閉tomcat裏沒有調用關閉線程池的方法。這裏需要手動關閉下,貼上代碼

技術分享圖片

技術分享圖片

如果使用spring的線程池,最好也要加上destroy-method哦。

技術分享圖片

最後徹底解決。希望對朋友有所幫助

linux環境中關閉tomcat,通過shutdown.sh無法徹底關閉--線程池