我的預約**服務突然掛了,檢視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後正常...