單機最大的TCP連線數及其修改
單機最大的TCP連線數及其修改
一個誤解: 單個伺服器程式可承受最大連線數“理論”上是“65535” .
65535這個數字的由來,很多人想當然地將它與port最大值聯絡起來。的確,TCP的埠數,最大值確實為65535。但是,這並不代表一個伺服器可以接受的連線數就是這個值。很多人之所以把這兩個概念搞混淆是因為對socket和port沒有更深的認識和理解。我們先來回想一下伺服器服務的先後過程:
1、伺服器建立監聽socket
2、與對外服務的埠號繫結
3、開始listen
4、客戶端連線到伺服器對應的port
5、伺服器accept為新的客戶端產生新的socket
6、基於這個新的socket與客戶端交換資料。
從以上流程來看,最大值為65535的“埠號”這個重要的東東,我們只用了一次,就是執行bind的時候!而以後建立的socket,說白了就是一個可以進行網路IO操作的HANDLE而已。通過檢視該HANDLE的RemoteEndPoint能檢視到遠端客戶端連線的IP和埠號(注意,該埠是遠端客戶端的埠),檢視該HANDLE的LocalEndPoint能看到該Socket的Ip和埠就是該服務繫結的IP和埠。所以,accept的socket值與埠號無關,又何來65535的“理論”上限?
好了,已經弄明白了伺服器端接收的客戶端連線連線數不受最大埠號65535的限制。但是,在客戶端,應用程式最多可以建立多少個TCP連線呢?以及如何調整系統引數來調整單機的最大TCP連線數。
Windows 下單機的TCP連線數有多個引數共同決定,下面一一介紹:
最大TCP連線數
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
TcpNumConnections = 0x00fffffe (Default = 16,777,214)
以上登錄檔資訊配置單機的最大允許的TCP連線數,預設為 16M。這個數值看似很大,這個並不是限制最大連線數的唯一條件,還有其他條件會限制到TCP 連線的最大連線數。
最大動態埠數
TCP客戶端和伺服器連線時,客戶端必須分配一個動態埠,預設情況下這個動態埠的分配範圍為 1024-5000 ,也就是說預設情況下,客戶端最多可以同時發起3977 個Socket 連線。我們可以修改如下注冊表來調整這個動態埠的範圍
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)
最大TCB 數量
系統為每個TCP 連線分配一個TCP 控制塊(TCP control block or TCB),這個控制塊用於快取TCP連線的一些引數,每個TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就說,每個TCP連線會佔用 1KB 的系統記憶體。
系統的最大TCB數量由如下注冊表設定決定
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000)
非Server版本,MaxFreeTcbs 的預設值為1000 (64M 以上實體記憶體)
Server 版本,這個的預設值為 2000。
也就是說,預設情況下,Server 版本最多同時可以建立並保持2000個TCP 連線。
最大TCB Hash table 數量
TCB 是通過Hash table 來管理的,下面登錄檔設定決定了這個Hash table 的大小
HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters]
MaxHashTableSize = 512 (Default = 512, Range = 64-65536)
這個值指明分配 pagepool 記憶體的數量,也就是說,如果MaxFreeTcbs = 1000 , 則 pagepool 的記憶體數量為 500KB
那麼 MaxHashTableSize 應大於 500 才行。這個數量越大,則Hash table 的冗餘度就越高,每次分配和查詢 TCP 連線用時就越少。這個值必須是2的冪,且最大為65536.
IBM WebSphere Voice Server 在windows server 2003 下的典型配置
這是IBM WebSphere Voice Server 的典型配置,大家可以做個參考。原文參見
IBM Web Sphere Voice Server 配置
•MaxUserPort = 65534 (Decimal)
•MaxHashTableSize = 65536 (Decimal)
•MaxFreeTcbs = 16000 (Decimal)
這裡我們可以看到 MaxHashTableSize 被配置為比MaxFreeTcbs 大4倍,這樣可以大大增加TCP建立的速度。
相關文章
- MySQL 修改最大連線數MySql
- 單臺伺服器最大tcp連線伺服器TCP
- activemq修改IO模型和最大連線數MQ模型
- 測試 mysql 的最大連線數MySql
- tcp 連線TCP
- 限制單個IP併發TCP連線的方法TCP
- 一臺伺服器最大能支援多少條TCP連線?伺服器TCP
- linux系統影響tcp連線數的因素LinuxTCP
- 統計TCP連線數和狀態TCP
- ESP作為單連線中的TCP客戶端TCP客戶端
- TCP 連線管理TCP
- mysql關於最大連線數、最大併發執行緒數的區別MySql執行緒
- tcp的半連線攻擊和全連線攻擊--TCP DEFER ACCEPTTCP
- 詳解IIS最大併發連線數
- MySQL 預設最大連線數是多少?MySql
- 簡單總結nodejs處理tcp連線的核心流程NodeJSTCP
- Jtti講解Linux最大連線數有多大?JttiLinux
- 修改陣列【並查集維護集合的最大值、連續數字的最大值】陣列並查集
- GBase 資料庫使用者的最大連線數限制資料庫
- TCP連線注意事項TCP
- 伺服器開啟遠端連線超出了最大允許連線數伺服器
- 12、Swoole 中 TCP、UDP 和長連線、短連線TCPUDP
- IIS連線數、併發連線數、最大併發工作執行緒數、應用程式池的佇列長度、應用程式池的最大工作程式數詳解執行緒佇列
- Websocket 突破最大長連線Web
- Dockerfile 修改,連線 sqlserverDockerSQLServer
- MySQL表連線及其優化MySql優化
- 拔掉網線後, 原本的 TCP 連線還存在嗎?TCP
- Hbase單機部署 java連線HbaseJava
- Libevent應用 (五) 連線監聽器,接收tcp連線TCP
- TCP連線是如何建立和終止的?TCP
- 動態IPvps的介紹及其連線方法
- Linux中tcp連線數過多會造成什麼影響?LinuxTCP
- 超簡單的Xshell連線手機終端
- Socket和TCP連線過程解析TCP
- Luat例項教程:tcp短連線TCP
- 最多能建立多少個 TCP 連線?TCP
- Sqlserver修改連線密碼SQLServer密碼
- lc3041 修改陣列後最大化陣列中的連續元素數目陣列
- TCP 三次握手原理以及半連線和全連線TCP