測試伺服器的最大併發的連線數

2021-06-16 04:45:56 字數 1258 閱讀 2165

今天上午測試了一下這段時間寫的伺服器的程式,主要測試的是伺服器的最大的併發的連線數.

伺服器端使用的是ace的前攝式(proactor)模式,該模式在windows平台下也就是大名鼎鼎的iocp模型。(記憶體4g、cpu4核)

模擬客戶端測試程式的編寫,採用多執行緒,乙個執行緒對應乙個連線,乙個執行緒分配16k的執行緒空間,這樣可以生成1萬個執行緒(程序的位址空間2g / 16 * 1024)。客戶端的工作:連線伺服器,連線成功後,每隔1秒向伺服器傳送資料。

測試結果如下:

i/o模型                           嘗試數/連線成功數

iocp                             10000/10000

注意事項:

在模擬客戶端程式對應的機器上,需要修改登錄檔:

hkey_local_machine/system/currentcontrolset/services下

如果不改登錄檔的話,相應的

連線成功數<4000如下圖:

tcpnumconnections

key: tcpip/parameters

取值型別:reg_dword - number

取值範圍:0 - 0xfffffe

預設值:0xfffffe

描述:本引數限制可以同時開啟的tcp連線的數量

maxuserport

key: tcpip/parameters

取值型別:reg_dword - number

取值範圍:5000-65534 (十進位制)

預設值:0x1388 (5000 十進位制)

描述:控制乙個應用程式可以開啟的最多埠數量。通常,短命的埠在1024-5000之間分配。

當試圖發起5000以上埠的連線,系統將出現wsaenobufs(10055)錯誤:因為佇列滿或者系統

缺乏足夠的緩衝空間。

如下圖所示:

測試效果截圖:

模擬客戶端

紅色的框中表示連線過萬

藍色的框中表示因為執行緒生成太多導致的棧溢位!

10-3-16加上面這句話不對,原因是csenddata對應的棧空間空間分配的太小,只有20位元組,超出了其範圍,

導致的棧溢位。而不是

執行緒生成太多導致的

今天晚上再測試一下,網上說iocp的併發的連線數可以到5w-6w,我改一下程式,把執行緒的棧空間改小一下,多生成些執行緒,將測試結果寫入檔案,讓它跑一晚上吧,試試看,行不行。

good luck!!

伺服器最大連線數問題

伺服器程序會有乙個最大連線數,如果達到最大連線數,server端報錯 listener accept fail accept tcp 6080 accept4 too many open files 此時,client端報錯 dial tcp 172.20.152.87 6080 i o timeo...

檢視Web伺服器併發請求連線數

1 檢視web伺服器 nginx apache 的併發請求數及其tcp連線狀態 netstat n awk tcp end 或者 netstat n grep tcp awk sort nr uniq c 或者 netstat n awk tcp end 返回結果一般如下 last ack 5 正在...

修改終端伺服器的最大連線數

1 明確終端服務的2種模式 windows 2000終端服務有2種執行模式 遠端管理模式和應用程式伺服器模式。遠端管理 模式允許系統管理員遠端管理伺服器,而且只允許2個終端會話同時登入終端伺服器。應用程 序伺服器模式允許使用者執行乙個以上應用程式,允許多個使用者從終端登入訪問伺服器。但是 應用終端服...