2011-08-30 58 views
2

我有一個使用TCP IP連接的C++編寫的winsock IOCP服務器。我已經在本地測試了這個服務器,使用客戶端模擬器的環回地址。我已經能夠獲得超過60,000客戶沒有汗水。我遇到的問題是當我在家中運行服務器並在朋友家中運行客戶端模擬器時。一切正常,直到我們打了3700個連接,之後,每次connect()調用失敗,客戶端返回10060(這是winsock超時錯誤)。昨晚這個數字是3700,但是它已經在300以前了,我們也看到它接近1000.但是無論數量是多少,每次我們試圖模擬它時,它都會繞着這個數字失敗(在10個左右) 。Winsock IOCP服務器壓力測試問題

這兩臺電腦都使用Windows 7旗艦版。我們還將TCPIP註冊表設置MaxTcpConnections修改爲約1600萬。我們還將MaxUserPort設置從5000的默認值更改爲65k。沒有有用的信息顯示在事件查看器中。我們還觀看了我們的資源監視器,並且我們還沒有獲得1%的網絡利用率,CPU也接近0%的使用率。

我們剛剛和我們的ISP斷開電話,他們說他們不以任何方式限制我們,但這傢伙有點兒不確定,最終在30分鐘的時間內掛斷了我們。

我們正在盡力解決這個問題,但無法提出解決方案。如果有人能幫我們解決這個問題,我會非常感激。

P.S.這兩臺電腦都在Verizon FIOS上,配有同樣的verizon路由器。另外需要注意的是,服務器使用WSAAccept而不使用AcceptEx。儘管客戶端模擬器嘗試連接了很多秒,所以我很確定連接不會累積。我們試圖改變客戶端模擬器連接的速度,不管它設置的速度是多少,每次都會失敗。

UPDATE 我們在網絡A上模擬了2個獨立的客戶端(在2個獨立的機器上)。服務器在網絡B上運行。每個客戶端只能連接一半(大約1600個)連接到服務器。我們最初使用的是1000以下的端口,這已被更改爲50,000以上。兩臺機器上的路由器登錄都沒有顯示。我們都使用Actiontec MI424WR verizon FIOS路由器。這使我相信問題不在客戶端代碼中。服務器不會引發錯誤並且沒有意外的行爲。這可能是一個ISP /路由器的問題?

UPDATE 找到了解決方案。我們使用的verizon路由器(MI424WR修訂版C)無法處理超過3700個連接,我們使用單獨的一組網絡對其進行了測試。謝謝你們的幫助!

感謝 - 裏克

+0

嘗試使用數據包嗅探器(例如wireshark)來確定問題 – Hasturkun

+0

我下載它並嘗試一下,我之前沒有使用過,所以我不確定要查找什麼。它是否會向您顯示發生的錯誤,還是我只需要檢查低級別的數據包並自行確定發生了什麼? – Rick

回答

0

我也能猜到這是一個MaxUserPort的問題,但你說你已經改變了這一切。更改後重新啓動了嗎?

在本地網絡上完全相同的計算機上運行測試(這將使計算機超出等式)。

這個問題可能是你的路由器不能勝任這項工作?

+0

感謝您的回覆。是的,我們在過去幾天重新啓動並處理了這個問題。我還沒有通過本地網絡進行測試,我會看看我是否可以做到這一點,並讓你知道發生了什麼。 – Rick

+0

此外,恰好可以在路由器做些什麼來防止這種代碼的工作(這哪裏會失敗?) – Rick

+0

我會感到驚訝,如果它是路由器,但也許,如果它是一個廉價的家用路由器,它不能夠處理許多併發連接... –