Linux:一臺機器理論能支持的連接數。

首先,在確定最大連接數之前,大家先跟我來先了解一下系統如何標識一個tcp連接。系統用一個四元組來唯一標識一個TCP連接:(source_ip,source_port,destination_ip,destination_port),即(源IP,源端口,目的IP,目的端口)四個元素的組合。只要四個元素的組合中有一個元素不一樣,那就可以區別不同的連接,比如:

你的IP地址是11.1.2.3,在8080端口監聽,那麼當一個來自22.4.5.6,端口爲5555的連接到達後,那麼建立的這條連接的四元組爲:(11.1.2.3,8080,22.4.5.6,5555);這時,假設上面的那個客戶(22.4.5.6)法來第二條請求,端口爲6666,那麼,新連接的四元組爲(11.1.2.3,8080,22.4.5.6,6666);那麼,你主機的8080端口建立了兩條連接。

通常來說,服務端是固定一個監聽端口,比如8080,等待客戶端的連接請求。在不考慮地址重用的情況下,即使server端有多個ip,但是本地監聽的端口是獨立的。所以對於tcp連接的4元組中,如果destination_ip和destination_port不變。那麼只有source_ip和source_port是可變的,因此最大的tcp連接數應該爲客戶端的ip數乘以客戶端的端口數。在IPV4中,不考慮ip分類等因素,最大的ip數爲2的32次方;客戶端最大的端口數2的16次方,也就是65536,也就是服務端單機最大的tcp連接數約爲2的48次方。

當然,這只是一個理論值,以linux服務器爲例,實際的連接數還取決於

  • 內存大小(因爲每個TCP連接都需要佔用一定的內存)
  • 文件句柄限制,每一個tcp連接都需要佔一個文件描述符,一旦這個文件描述符使用完了,新來的連接會返回一個“Can't open so many files”的異常。如果大家知道對操作系統最大可以打開的文件限制,就知道怎麼去調整這個限制。
    1. 可以執行【ulimit -n】得到當前一個進程最大能打1024個文件,所以你要採用此默認配置最多也就可以併發上千個TCP連接。
    2. 可以通過【vim /etc/security/limits.conf】去修改系統最大文件打開數的限制
      * soft nofile 2048
      * soft nofile 2048
      * 表示修改所有用戶限制、soft/hard表示軟限制還是硬限制,2048表示修改以後的值
    3. 可以通過【cat /proc/sys/fs/file-max】查看linux系統級最大打開文件數限制,表示當前這個服務器最多能同時打開多少個文件
  • 帶寬資源的限制

什麼是文件描述符(fd)?

在linux中,內核把所有的外部設備都當成是一個文件來操作,對一個文件的讀寫會調用內核提供的系統命令,返回一個fd(文件描述符)。而對於一個socket的讀寫也會有相應的文件描述符,成爲socketfd。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章