net.ipv4.tcp_max_syn_backlog & net.core.somaxconn
TCP SYN_REVD, ESTABELLISHED 狀態對應的佇列
TCP 建立連線時要經過 3 次握手,在客戶端向伺服器發起連線時,對於伺服器而言,一個完整的連線建立過程,伺服器會經歷 2 種 TCP 狀態:SYN_REVD, ESTABELLISHED
對應也會維護兩個佇列:
- 一個存放 SYN 的佇列(半連線佇列)
- 一個存放已經完成連線的佇列(全連線佇列)
當一個連線的狀態是 SYN RECEIVED 時,它會被放在 SYN 佇列中
當它的狀態變為 ESTABLISHED 時,它會被轉移到另一個佇列。所以後端的應用程式只從已完成的連線的佇列中獲取請求
如果一個伺服器要處理大量網路連線,且併發性比較高,那麼這兩個佇列長度就非常重要了。因為,即使伺服器的硬體配置非常高,伺服器端程式效能很好,但是這兩個佇列非常小,那麼經常會出現客戶端連線不上的現象,因為這兩個佇列一旦滿了後,很容易丟包,或者連線被複位。所以,如果伺服器併發訪問量非常高,那麼這兩個佇列的設定就非常重要了。