最近web伺服器在大流量情況下經常出現假死現象,後台log報 too many open files 的錯誤,加大linux系統的檔案開啟數是可以解決部分問題,但是時間長了同樣出問題,通過查詢網路連線發現是tcp連線不關閉造成的。如下:
netstat -n | awk '/^tcp/ end '
last_ack 1
syn_recv 15
close_wait 7729
established 471
fin_wait1 3
fin_wait2 52
syn_sent 1
time_wait 725
從結果可以看到有大量的連線處於close_wait狀態。
要解決這個問題的可以修改系統的引數,系統預設超時時間的是7200秒,也就是2小時。
預設如下:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某個tcp連線在idle 2個小時後,核心才發起probe.如果probe 9次(每次75秒)不成功,核心才徹底放棄,認為該連線已失效
修改後sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
經過這個修改後,伺服器會在短時間裡**沒有關閉的tcp連線。
生產close wait問題排查記錄
一 問題現象 背景 公司封裝了訊息中心,統一對接外部簡訊通道,並提供統一的傳送api http介面 供公司內部使用。環境如下 問題現象 圖中 3.簡訊平台 出現很多 closed wait 連線,檢視這些closed wait的連線都是和nginx的連線ip port 二 分析http在什麼情況下會...
close wait狀態的產生原因及解決
最近需要上線的邏輯server由於需要與大量的後台server互動,今天突然發現有大量的close wait產生,於是仔細研究了一下 首先我們知道,如果我們的伺服器程式處於close wait狀態的話,說明套接字是被動關閉的!因為如果是client端主動斷掉當前連線的話,那麼雙方關閉這個tcp連線共...
close wait狀態的產生原因及解決
最近測試環境server由於需要與大量的後台server互動,今天突然發現有大量的close wait產生,於是仔細研究了一下 如果我們的伺服器程式處於close wait狀態的話,說明套接字是被動關閉的!因為如果是client端主動斷掉當前連線的話,那麼雙方關閉這個tcp連線共需要四個packet...