出現過多close wait導致的tomcat假死

2021-10-09 07:34:36 字數 1301 閱讀 4935

我的預約**服務突然掛了,檢視tomcat的埠號的時候出現,一堆的close_wait導致了我的tomcat假死,就算重啟了,再看埠號也是一堆close_wait。

因為是個網上預約**服務,不能停太久。

所以我沒有查原因直接把所有占用我的埠的程序全殺了,然後重啟,不管了,先恢復服務再查原因。

把占用埠的命令全殺了的命令:sudo kill -9 $(lsof -i:埠號 -t)

檢視最新日誌catalina.out ,沒有發現異常,也沒有error 日誌;檢視localhost_access.log 也沒有最新的訪問日誌,說明我這台tomcat 已不能提供服務了!

然後想到這個tomcat掛的時候正好內網出了問題,想到的是網路是問題

看看客戶端已經斷開連線,但伺服器還在傳送訊息,講道理伺服器也應該要斷開連線才對的。根據tcp的三次握手和四次揮手,這不對啊,

tomcat常用的三個狀態是:

established 正在通訊

time_wait 主動關閉

close_wait 表示被動關閉。

這個bug很顯然就是伺服器端**未能及時的釋放資源所造成的,

可以通過以下途徑修改linux配置檔案

vim /etc/sysctl.conf在檔案末端加上以下內容:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

然後執行 /sbin/sysctl -p 讓引數生效。

net.ipv4.tcp_syncookies = 1 表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn攻擊,預設為0,表示關閉;

net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1 表示開啟tcp連線中time-wait sockets的快速**,預設為0,表示關閉。

net.ipv4.tcp_fin_timeout 修改系統預設的 timeout 時間

餓了,不想寫了先存起來~

Linux下CLOSE WAIT過多分析與解決

檢視鏈結狀態 netstat ant awk tcp end 情景描述 系統產生大量 too many open files 原因分析 在伺服器與客戶端通訊過程中,因伺服器發生了socket未關導致的closed wait發生,致使監聽port開啟的控制代碼數到了1024個,且均處於close wa...

大量CLOSE WAIT連線導致服務假死

參考 三次握手 四次揮手 引用重點語句 close wait 從上面的圖可以看出來,如果一直保持在close wait 狀態,那麼只有一種情況,就是在對方關閉連線之後,伺服器程式自己沒有進一步發出ack 訊號。換句話說,就是在對方連線關閉之後,程式裡沒有檢測到,或者程式壓根就忘記了這個時候需要關閉連...

tcp中close wait狀態出現的原因

close wait出現的原因 就是某一方在網路連線斷開後,對等方沒有檢測到這個錯誤 對方斷開 而沒有調 用 closesocket,導致了這個狀態的出現.模擬這樣乙個環境 伺服器192.168.1.112 4500在接收到乙個客戶端的連線後,休眠五秒後,伺服器關閉與客戶 端通訊的socket後正常...