Tomcat假死原因排查

2021-09-28 23:38:41 字數 909 閱讀 3947

tomcat假死?為什麼會假死呢,可能大多數人不會碰到這個問題,如果出現問題,重啟伺服器就好了,可是如果這個問題沒有解決的話,那麼就可能會存在相應的隱患,如果你的使用者量多,那麼必然你的請求量就高,這樣假死的發生頻率就會越來越高。

而剛好我們線上也出現了這個問題,就是tomcat假死,是如何知道假死的呢

開始我們的伺服器報警預告無法訪問某些介面發,報502的錯誤,由於我們的專案是通過nginx進行負載的,因此我們馬上開啟nginx進行日誌檢視,發現沒什麼異常,這個時候我們就去看後台tomcat的日誌,發現沒有日誌列印,停留在了報警錢的日誌,這個時候我們通過jmap和jstat來檢視我們的專案是否存在記憶體洩露或者其他導致專案出問題的原因,但是發現一切正常,記憶體也不會一直飆公升,這個時候沒有辦法,由於是線上我們只能重啟伺服器,重啟完後,馬上有用,但是過了一段時間又出現假死的狀態。於是自己備留了一台進行原因的檢視。

排查方法:

1、使用jmap的檢視記憶體,看是否是記憶體洩露

2、分析dump檔案,看是否存在問題

如果這兩個都沒有問題的話,那麼我們就需要使用這一步進行檢視

netstat -n | awk '/^tcp/  end '
這個命令可以檢視tomcat的連線、等待、關閉等

我們發現我們假死的伺服器的close_wait巨高,有五六千個,因為這個tcp的連線一直沒有釋放,導致新的沒有可用,而這個時候外面的獲取不到可用的,而裡面又不釋放,這樣就導致假死狀態。

而我們之前部署從來沒有出現問題,是最近一次才出現問題的。然後翻閱資料發現可能是我們後台寫的http呼叫出現了問題,每次進行請求,但是忘記釋放連線導致的。因此我們只需要將這個原有的http請求換成連線池的方式,換完以後,我們重新打上去的時候,發現這次問題解決了。

當然如果有興趣的話,可以去抓包看看http的三次握手以及四次揮手你就能發現問題所在

如何排查程序假死

首先,先找出那個假死的程序然後檢視狀態,用ps命令 ps aux head n 1 ps aux grep process niubi hh.php 這裡說個小技巧,就是如何展示ps的表頭,可以看出我的命令裡其實是兩條命令組成,第一條是獲取頭一條,然後加個分號,最後再把需要獲取內容的命令拼上去,也就...

linux程序假死的原因 linux 假死分析

所謂假死,就是能ping通,但是ssh不上去 任何其他操作也都沒反應,包括上面部署的apache也打不開頁面。作為乙個多工作業系統,要把系統忙死,忙到ssh都連不上去,也不是那麼容易的。尤其是現在還有fd保護 程序數保護 最大記憶體保護之類的機制。你可以fork很多程序,系統會變得很慢,但是ssh還...

tomcat無法響應請求,假死

線上的tomcat執行一段時間就會假死,通過netstat檢視埠情況會發現tomcat的埠出現大量的close wait,此時tomcat會停止響應前端請求,同時服務端的日誌,操作等將全部停止,而且沒有出現任何異常。肯定是 問題,於是將伺服器執行緒堆疊dump下來分析具體的問題,好在jdk下面提供了...