epoll非阻塞伺服器,在20k併發測試結束產生大量establish狀態假連線,可能原因?

時間 2021-05-30 15:20:17

1樓:

在做AB壓測時,我也遇到類似問題,client壓測過去之後,client有少量timewait,而server端有大量timewait,但是其數值仍然小於/proc/sys/net/ipv4/tcp_max_tw_buckets。

所以產生如下懷疑

1. ab壓測時並沒有傳送FIN給服務端,直接關閉connect。而服務端只能保持timewait狀態,等待/proc/sys/net/ipv4/tcp_fin_timeout超時關閉,而該核心設定通常為60秒。

2. ab壓測時傳送了FIN給服務端,但是不等服務端ACK即將connect關閉。服務端收到FIN返回ACK資訊時發現connect已經關閉,server端不正常處理FIN資訊?

糾正題主1處錯誤,從題主截圖來看ab併發並非20k而是2k, 另外推薦使用ss命令取代netstat

ss -s 可以直接檢視tcp的所有狀態的當前情況

另外如果單機要實現20k併發需要做很多核心上的調整,如下(但不限於如下):

1. 在滿足業務的情況下,儘量減少timewait close等待時間 /proc/sys/net/ipv4/tcp_fin_timeout

2. 開啟TCP timewait重用,但是慎重,可能帶來不可預知的問題 /proc/sys/net/ipv4/tcp_tw_reuse

3. 每個socket記憶體耗用大概在15-20k左右,再加上應用層的記憶體占用和各種buffer,可以估算下記憶體和socket的對等關係, /proc/sys/net/ipv4/tcp_rmem /proc/sys/net/ipv4/tcp_wmem

4. 修改ulimit限制如 open files 系統同時最大開啟的檔案描述符等

5. 基於linux2.6及以後核心的epoll併發機制,實現非堵塞併發,如果是堵塞併發還是遠離20k這個目標吧

將如上5個細節調整到系統最優,或許有望可以實現20K併發。

2樓:

1)ab close了連線,而你寫的服務端的連線都是ESTABLISHED,最可能的情況是ab的FIN丟包了(可能是伺服器所在主機cpu使用率過高未響應),此時客戶端在FIN_WAIT_1狀態,進入TCP超時重傳一定次數後依然沒有收到ACK, 放棄了連線,不會繼續FIN_WAIT_2和TIME_WAIT狀態了。

2)如果你kill掉服務端程式,伺服器所在的主機協議棧會給客戶端主機傳送FIN,但客戶端程式已經結束了,客戶端所在主機的協議棧會以RST響應之, 導致伺服器所在主機立刻釋放連線。

3樓:林治暉

客戶端的fin包丟了,fin_wait1 狀態下 fin包重試是有次數限制的,重試仍不成功鏈結被釋放了。另外,你kill服務,因為客戶端這個鏈結已經釋放,所以收到fin包直接回覆rest鏈結直接被釋放。但是拔網線,服務端一直收不到客戶端的響應,所以卡在fin_wait1重試

vuejs怎麼在伺服器部署?

職座標 如果你選擇的是vue cli這個腳手架,首先第一步 npm run build打包專案 第二步 把打包以後的dist裡面的檔案上傳到伺服器www目錄下 第三步 配置監聽埠號 奔騰年代 部署 Vue CLI 3看這裡有詳細的說明。部署方式基本有兩類,都可以做到正常工作 使用類似於 Nginx ...

在Minecraft遊戲裡伺服器真的很亂嗎? Ps 指大概總體而言

奇方丶 不亂,基本上伺服器的腐竹都會把伺服器打理的比較妥當,沒有op許可權的玩家都不會太囂張 當然他也不能 伺服器基本上都是有命令方塊的指令來協助執行,除非有些腐竹人傻錢多,帶著一群人在伺服器裡瞎搞,所以說除去個例,Minecraft裡面的伺服器還是不亂的。 帥大2004 瀉藥。我是基岩版玩家,只談...

關於在Minecraft伺服器內實現自平衡經濟的可行性?

undyne 反正自平衡經濟的話 我一直玩的伺服器就幾乎實現了 儘管交易的是紅石機械 我們的管理組直接給無限的紅石資源 剩下的玩家幾乎都是在造紅石機械 用紅石機器以物換物 我在2012 2015年期間,和 爐心工藝 廢話二次元 的管理組一起集中運營過十來個周目,現在已經進入鹹魚狀態。雖然基本都是人數...