在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。
windows下單機的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)
系統為每個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 來管理的,下面登錄檔設定決定了這個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.
l
ibm websphere voice server
在windows server 2003 下的典型配置
ibm web sphere voice server 配置
這裡我們可以看到 maxhashtablesize 被配置為比maxfreetcbs 大4倍,這樣可以大大增加tcp建立的速度。
Windows 下單機最大TCP連線數
在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。windows 下單機的tcp連線數有多個引數共同決定,下面一一介紹 hkey local machine system currentcontrolset s...
Windows 下單機最大TCP連線數
在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。windows 下單機的tcp連線數有多個引數共同決定,下面一一介紹 hkey local machine system currentcontrolset s...
Windows 下單機最大TCP連線數
在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。windows 下單機的tcp連線數有多個引數共同決定,下面一一介紹 hkey local machine system currentcontrolset s...