單機最大的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建立的速度。
相關文章
- 單機最大tcp連線數TCP
- MYSQL 檢視最大連線數和修改最大連線數MySql
- MySQL 修改最大連線數MySql
- mysql最大連線數修改MySql
- 單臺伺服器最大tcp連線伺服器TCP
- activemq修改IO模型和最大連線數MQ模型
- 檢視並修改oracle最大連線數Oracle
- ORACLE檢視並修改最大連線數Oracle
- Linux配置支援高併發TCP連線(socket最大連線數)LinuxTCP
- linux修改TCP連線數(centos實測)LinuxTCPCentOS
- Jboss的最大連線數
- 修改Windows 2003最大遠端連線數Windows
- mysql最大連線數MySql
- ubuntu linux 修改socket最大連線數,同時也是檔案最大開啟數UbuntuLinux
- 加大MySql的最大連線數MySql
- Windows Socket 最大連線數Windows
- 測試 mysql 的最大連線數MySql
- 單機併發連線數研究
- oracle最大連線數相關Oracle
- Oracle檢視允許的最大連線數和當前連線數Oracle
- RabbitMQ能開啟的最大連線數MQ
- Windows TCP連線數限制解決WindowsTCP
- tcp 連線TCP
- TCP的連線建立TCP
- mstsc命令遭遇超出最大連線數
- Tomcat最大連線數問題Tomcat
- EBS DB最大連線數調整
- oracle檢視允許的最大連線數和當前連線數等資訊Oracle
- 限制單個IP併發TCP連線的方法TCP
- 摘--修改Linux核心引數,減少TCP連線中的TIME-WAIT socketsLinuxTCPAI
- 統計TCP連線數和狀態TCP
- 一臺伺服器最大能支援多少條TCP連線?伺服器TCP
- mysql修改本地主機連線MySql
- mysql關於最大連線數、最大併發執行緒數的區別MySql執行緒
- 詳解IIS最大併發連線數
- MySQL 預設最大連線數是多少?MySql
- TCP 連線管理TCP
- 如何看例項的歷史最大連線數?