測試服務器的最大併發的連接數

   原文地址:http://blog.chinaunix.net/u2/61062/showart_2194214.html

    今天上午測試了一下這段時間寫的服務器的程序,主要測試的是服務器的最大的併發的連接數.
    服務器端使用的是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!!
發佈了37 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章