tomcat“閃退” 進程終止排查-進程退出、解決方案

Tomcat進程意外退出的問題分析

早上6點接到電話java服務器掛掉了,本能的立刻清醒起來查看服務器狀態,發現tomcat確實停止運行了,立刻的重啓了之後去找問題所在(ps:這個問題體現了集羣負載均衡是多麼重要,服務器幾乎崩潰一晚上)


錯誤排查思路:首先想到的是服務器是否負載導致tomcat閃退(stackoverflow/outofmemoryerror),hs_err_pid.log文件未生成,表明jvm正常運行,然後去查看tomcat日誌


此處顯示tomcat停止於02:53:00,而且無任何錯誤,tomcat是正常關閉的!!!看清楚這是正常關閉的,根本不存在負載退出的情況


本能想到怕是要被黑客爆ju了,查看了tomcat最後的訪問地址無異常



查看服務器負載情況(指系統,因爲使用的是阿里雲服務器,當然的有記錄崩潰時服務器的運行狀態)一切正常,無任何可疑地方,使用stat "命令地址" 查詢系統命令是否有修改過

例如:

未發現異常,繼續查詢遠程終端登錄情況last 命令查詢


登錄終端也是正常,都是本人自己的ip,試想好不好被linux終止了tomcat進程於是去查詢/var/log/message 日誌信息


未發現異常,緊接着去查詢/var/log/secure日誌文件


這次發現了有趣的事情,sshd關閉了遠程連接時間與tomcat進程終止時間完全吻合,定位了問題之後就方便多了,查詢了一些資料之後重現了tomcat進程“閃退”,總的來說是因爲發佈版本完成之後未關閉shell腳本,腳本還在掛着tailf查看日誌,電腦休眠之後sshd主動關閉了遠程連接,java進程仍屬於shell進程組裏的成員,收到SIGHUP後退出,自己寫了個簡單的腳本重現了當時的情況。確定了問題就是這個原因。

如果我們在shell腳本里設置開啓作業控制的話,就不會讓tomcat進程退出了,總算是虛驚一場,是自己的原因導致tomcat進程結束,並不是黑客入侵~


總結:啓動完成之後需要關閉退出腳本,就不會出現sshd關閉遠程連接而使進程終止了,當然更好的辦法是在腳本中加入設置開啓作業控制(分開進程組)就不會出現這個問題啦~

每個人碰到的閃退問題可能不一致,但排查的思路還是值得學習的~


借鑑文章:http://ifeve.com/why-kill-2-cannot-stop-tomcat/

set -m 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章