Windows 下單機最大TCP連接數(shù)
在做Socket 編程時棺禾,我們經(jīng)常會要問泞边,單機最多可以建立多少個 TCP 連接荔茬,本文將介紹如何調整系統(tǒng)參數(shù)來調整單機的最大TCP連接數(shù)霸琴。
Windows 下單機的TCP連接數(shù)有多個參數(shù)共同決定雄家,下面一一介紹:
最大TCP連接數(shù)
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
TcpNumConnections = 0x00fffffe (Default = 16,777,214)
以上注冊表信息配置單機的最大允許的TCP連接數(shù)氮双,默認為 16M碰酝。這個數(shù)值看似很大,這個并不是限制最大連接數(shù)的唯一條件戴差,還有其他條件會限制到TCP 連接的最大連接數(shù)送爸。
最大動態(tài)端口數(shù)
TCP客戶端和服務器連接時,客戶端必須分配一個動態(tài)端口,默認情況下這個動態(tài)端口的分配范圍為 1024-5000 袭厂,也就是說默認情況下墨吓,客戶端最多可以同時發(fā)起3977 個Socket 連接。我們可以修改如下注冊表來調整這個動態(tài)端口的范圍
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)
最大TCB 數(shù)量
系統(tǒng)為每個TCP 連接分配一個TCP 控制塊(TCP control block or TCB)纹磺,這個控制塊用于緩存TCP連接的一些參數(shù)帖烘,每個TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就說橄杨,每個TCP連接會占用 1KB 的系統(tǒng)內(nèi)存秘症。
系統(tǒng)的最大TCB數(shù)量由如下注冊表設置決定
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000)
非Server版本,MaxFreeTcbs 的默認值為1000 (64M 以上物理內(nèi)存)
Server 版本式矫,這個的默認值為 2000乡摹。
也就是說,默認情況下采转,Server 版本最多同時可以建立并保持2000個TCP 連接聪廉。
最大TCB Hash table 數(shù)量
TCB 是通過Hash table 來管理的,下面注冊表設置決定了這個Hash table 的大小
HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters]
MaxHashTableSize = 512 (Default = 512, Range = 64-65536)
這個值指明分配 pagepool 內(nèi)存的數(shù)量氏义,也就是說锄列,如果MaxFreeTcbs = 1000 , 則 pagepool 的內(nèi)存數(shù)量為 500KB
那么 MaxHashTableSize 應大于 500 才行。這個數(shù)量越大惯悠,則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建立的速度鸭蛙。