windows 下TCP最大連線數

2022-02-06 07:42:45 字數 1605 閱讀 8318

在做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.

ibm web sphere voice server 配置

這裡我們可以看到 maxhashtablesize 被配置為比maxfreetcbs 大4倍,這樣可以大大增加tcp建立的速度。

測試Linux下tcp最大連線數限制

現在做伺服器開發不加上高併發根本沒臉出門,所以為了以後吹水被別人懟 天天提高併發,你自己實現的最高併發是多少 的時候能義正言辭的懟回去,趁著元旦在家沒事決定自己寫個demo搞一搞。這個測試主要是想搞明白linux下哪些引數配置限制了連線數的最大值,上限是多少。服務端用epoll實現,就是簡簡單單的接...

如何測試Linux下tcp最大連線數限制詳解

前言 關於tcp伺服器最大併發連線數有一種誤解就是 因為埠號上限為65535,所以tcp伺服器理論上的可承載的最大併發連線數也是65535 先說結論 對於tcp服務端程序來說,他可以同時連線的客戶端數量並不受限於可用埠號。併發連線數受限於linux可開啟檔案數,這個數是可以配置的,可以非常大,所以實...

Windows 下單機最大TCP連線數

在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。windows 下單機的tcp連線數有多個引數共同決定,下面一一介紹 hkey local machine system currentcontrolset s...