http長連線及TIME WAIT問題總結

2022-09-12 15:54:33 字數 1013 閱讀 5579

目錄2. 背後的原理

3. 命令

4. 參考

線上出現大量的close_wait連線問題,多達2萬多個,新的連線很多建立錯誤,通過以下命令可以檢視:

root@vm-node-72-41 ~]# netstat -lanp |grep close_wait |wc -l

26304

aws sdk 底層採用 libcurl 庫傳送http請求,維護有乙個 curl 的控制代碼池,最大目前設定為 cpu數目*2。

http請求採用長連線的形式,每次http請求,取乙個控制代碼,用完之後,呼叫 curl_easy_reset()函式重置後,放回控制代碼池。

如果在下次使用該控制代碼前,aws 服務端關閉了該連線,就會產生 close_wait 狀態的 tcp 連線;

存在 aws client 控制代碼洩露,後台輪詢 login, 導致 client 控制代碼洩露。

什麼是 tcp 連線的 close_wait 狀態呢?這要從 tcp 連線的3次握手和4次揮手說起。

參考: tcp連線全過程各種狀態詳解

示意圖:

tcp 連線的抓包示意圖:

參考: 伺服器time_wait和close_wait分析和解決辦法

檢視tcp連線狀態

[root@node7132 ~]# netstat -n | awk '/^tcp/  end '

close_wait 14

established 637

time_wait 4

HTTP長連線和WebSocket長連線的區別

要理解http長連線和websocket長連線的區別,首先要理解一下什麼是http的長連線和短連線。首先需要消除乙個誤解 http協議是基於請求 響應模式的,因此客戶端請求後只要服務端給了響應,本次http請求就結束了,沒有長連線這一說。那麼自然也就沒有短連線這一說了。所謂的http分為長連線和短連...

http 長連線 短連線

http短連線 非持久連線 是指,客戶端和服務端進行一次http請求 響應之後,就關閉連線。所以,下一次的http請求 響應操作就需要重新建立連線。http長連線 持久連線 是指,客戶端和服務端建立一次連線之後,可以在這條連線上進行多次請求 響應操作。持久連線可以設定過期時間,也可以不設定。http...

Http長連線配置

客戶端與nginx的長連線 keepalive timeout 客戶端與nginx之間的長連線超時設定,當乙個連線的最後一次資料傳輸至今超過了這個時間,那麼當前連線就會被服務端主動關閉。預設值60s,因此客戶端與nginx預設是長連線的。keepalive requests 也是客戶端與nginx的...