解決CLOSE WAIT 問題

2021-08-25 10:21:29 字數 812 閱讀 2460

最近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...