一、問題現象
背景:公司封裝了訊息中心,統一對接外部簡訊通道,並提供統一的傳送api(http介面),供公司內部使用。
環境如下:
問題現象:圖中「3.簡訊平台」 出現很多 closed_wait 連線,檢視這些closed_wait的連線都是和nginx的連線ip:port
二、分析http在什麼情況下會出現closed_wait
來看一下http狀態變化圖:
2、根據上圖可知,當客戶端主動關閉連線,發起 fin 包時,服務端此時則處於 close_wait狀態,當服務端傳送ack、fin後,服務端才會處於 closed 狀態,那問題是為什麼服務端不傳送ack、fin報文呢?客戶端什麼情況下會主動關閉連線呢?
3、客戶端主動關閉連線,服務端不傳送ack、fin報文…
懷疑是否因為服務端阻塞了,客戶端超時後關閉連線
不如現在本地測試下,經過測試,通過jmeter呼叫本地tomcat,並設定超時時間為5s,然後在本地**打上乙個斷點,這樣服務端就不會響應客戶端了。經測試果然如此,在5s後,服務端的埠連線狀態為closed_wait,客戶端的連線狀態為:fin_wait_2,和我們的猜想一致。
解決CLOSE WAIT 問題
最近web伺服器在大流量情況下經常出現假死現象,後台log報 too many open files 的錯誤,加大linux系統的檔案開啟數是可以解決部分問題,但是時間長了同樣出問題,通過查詢網路連線發現是tcp連線不關閉造成的。如下 netstat n awk tcp end last ack 1...
Redis 生產事件排查
日誌告警 oom command not allowed when used memory 大綱 設定maxmemory和相對應的 策略演算法,設定最好為物理記憶體的3 4,或者比例更小,因為redis複製資料等其他服務時,也是需要快取的。以防快取資料過大致使redis崩潰,造成系統出錯不可用。通過...
生產服務記憶體洩露排查
生產環境,我們使用rancher k8s部署我們的服務,有個服務 具體我這裡就不說了 在晚上8點左右,因為這個服務的記憶體溢位導致了其他服務出現了異常,在8點的時候,客戶頻繁投訴,後面排查發現是有個服務記憶體洩露。通過grafana圖形觀察,可以明顯看到其實這個服務在早市11點左右其實已經記憶體洩露...