今天上午測試了一下這段時間寫的伺服器的程式,主要測試的是伺服器的最大的併發的連線數.
伺服器端使用的是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個終端會話同時登入終端伺服器。應用程 序伺服器模式允許使用者執行乙個以上應用程式,允許多個使用者從終端登入訪問伺服器。但是 應用終端服...