伺服器最大連線數問題

2021-08-18 07:25:43 字數 2020 閱讀 2686

伺服器程序會有乙個最大連線數,如果達到最大連線數,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連線:。

####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 -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是使用者使用的。對於有乙個機器,如果只有乙個ip位址,並且連線全部作為client,由於每個tcp連線都要佔乙個埠號,所以最多可以有60000多個併發連線。

#參考詳解linux伺服器最大tcp連線數

詳解Linux伺服器Tcp最大連線數

網路程式設計 在tcp應用中,server事先在某個固定埠監聽,client主動發起連線,經過三路握手後建立tcp連線。那麼對單機,其最大併發tcp連線數是多少?如何標識乙個tcp連線 在確定最大連線數之前,先來看看系統如何標識乙個tcp連線。系統用乙個4四元組來唯一標識乙個tcp連線 client...

修改終端伺服器的最大連線數

1 明確終端服務的2種模式 windows 2000終端服務有2種執行模式 遠端管理模式和應用程式伺服器模式。遠端管理 模式允許系統管理員遠端管理伺服器,而且只允許2個終端會話同時登入終端伺服器。應用程 序伺服器模式允許使用者執行乙個以上應用程式,允許多個使用者從終端登入訪問伺服器。但是 應用終端服...

Tomcat最大連線數問題

tomcat的server.xml中context元素的以下引數應該怎麼配合適 答曰 maxthreads 150 表示最多同時處理150個連線 minsparethreads 25 表示即使沒有人使用也開這麼多空執行緒等待 maxsparethreads 75 表示如果最多可以空75個執行緒,例如...