TCP客戶端Socket如何立即釋放端口?
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
在做一個關于web負載均衡的壓力測試的時候碰到一個問題。
測試采用的是單機測試,web服務器+3個負載均衡節點服務+客戶端 都在同一臺4核工作機上。 由于測試邏輯簡單,1024個http客戶端4s左右會吃光6W個端口,繼續訪問就會出現錯誤:由于系統緩沖區空間不足或隊列已滿,不能執行套接字上的操作。錯誤的原因是Socket占用的端口沒有被釋放,需要等待20+s才能進行下一輪測試,很浪費時間。 需要說明的是,釋放客戶端端口不像服務器端口那樣關閉Socket就可以了??蛻舳硕丝谠赟ocket關閉之后處于Close_Wait狀態,這個狀態時間應該是由HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的TcpTimedWaitDelay鍵值決定的,但是這個值最小值是30s。 另外可以使用API函數SetTcpEntry強行關閉連接釋放端口,但是某些操作系統由于UAC的原因需要提升為管理員權限,如果通過app.manifest設置管理員身份運行,會彈出一個提升權限的對話框,作為一個性能測試的Demo彈出這樣一個框感覺有點嚇人。 希望高人指點,如何在不需要用戶參與的情況下把端口釋放掉。需要具體測試代碼的話可以到這里下載https://fastcsharp.codeplex.com/,測試項目為demo.loadBalancingTcpCommandWeb。 該文章在 2017/4/12 1:29:55 編輯過
|
關鍵字查詢
相關文章
正在查詢... |