服務器最大連接數問題


問題

服務器進程會有一個最大連接數,如果達到最大連接數,server端報錯:

 listener accept fail: accept tcp [::]:6080: accept4: too many open files


此時,client端報錯:

dial tcp 172.20.152.87:6080: i/o timeout

client連接超時

下面來看下哪些因素影響最大連接數。
最大連接


 

如何標識一個TCP連接
在確定最大連接數之前,先來看看系統如何標識一個tcp連接。系統用一個4元組來唯一標識一個TCP連接:{local ip, local port,remote ip,remote port}。

client最大tcp連接數
client每次發起tcp連接請求時,除非綁定端口,通常會讓系統選取一個空閑的本地端口(local port),該端口是獨占的,不能和其他tcp連接共享。tcp端口的數據類型是unsigned short(2字節),因此本地端口個數最大只有65536,端口0有特殊含義,不能使用,這樣可用端口最多只有65535,所以在全部作為client端的情況下,最大tcp連接數為65535,這些連接可以連到不同的server ip。

server最大tcp連接數
server通常固定在某個本地端口上監聽,等待client的連接請求。不考慮地址重用(unix的SO_REUSEADDR選項)的情況下,即使server端有多個ip,本地監聽端口也是獨占的,因此server端tcp連接4元組中只有remote ip(client ip)和remote port(client port)是可變的,因此最大tcp連接為客戶端ip數×客戶端port數,對IPV4,不考慮ip地址分類等因素,最大tcp連接數約為2的32次方(ip數)×2的16次方(port數),也就是server端單機最大tcp連接數約為2的48次方。

上面給出的是理論上的單機最大連接數,在實際環境中,受到機器資源、操作系統等的限制,特別是sever端,其最大並發tcp連接數遠不能達到理論上限。

在unix/linux下限制連接數的主要因素是內存和允許的文件描述符個數(每個tcp連接都要占用一定內存,每個socket就是一個文件描述符),在默認2.6內核配置下,經過試驗,每個socket占用內存在15~20k之間。

下面針對兩個主要限制:文件句柄限制和端口限制進行說明。
文件句柄限制


在linux下每一個tcp連接都要占一個文件描述符,如果達到上限,就會出現錯誤:“Socket/File:Can’t open so many files”。

操作系統對可以打開的最大文件數有限制。
文件句柄進程級限制

執行 ulimit -n 輸出 1024,說明對於一個進程而言最多只能打開1024個文件,所以你要采用此默認配置最多也就可以並發上千個TCP連接。

    臨時修改
    ulimit -n 1000000,但是這種臨時修改只對當前登錄用戶目前的使用環境有效,系統重啟或用戶退出后就會失效。

    重啟后失效的修改(不過我在CentOS 6.5下測試,重啟后未發現失效)
    編輯 /etc/security/limits.conf 文件, 修改后內容為

soft nofile 1000000
hard nofile 1000000


    永久修改
    編輯/etc/rc.local,在其后添加如下內容

ulimit -SHn 1000000


文件句柄全局限制

執行 cat /proc/sys/fs/file-nr
輸出 9344 0 592026
分別為:
1.已經分配的文件句柄數,
2.已經分配但沒有使用的文件句柄數,
3.最大文件句柄數。

但在kernel 2.6版本中第二項的值總為0,這並不是一個錯誤,它實際上意味着已經分配的文件描述符無一浪費的都已經被使用了 。

我們可以把這個數值改大些,用 root 權限修改 /etc/sysctl.conf 文件:

fs.file-max = 1000000
net.ipv4.ip_conntrack_max = 1000000
net.ipv4.netfilter.ip_conntrack_max = 1000000

 

端口號范圍限制


操作系統上端口號1024以下是系統保留的,從1024-65535是用戶使用的。由於每個TCP連接都要占一個端口號,所以最多可以有60000多個並發連接。
參考

詳解Linux服務器最大tcp連接數
http://www.cnblogs.com/fjping0606/p/4729389.html

轉自:https://blog.csdn.net/lanyang123456/article/details/79834998

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM