才知道一直以來 「We are using HttpClient wrong! 」
netsh int ipv4 show dynamicport tcp
得到如下結果
netsh int ipv4 show dynamicport tcp Protocol tcp
Dynamic Port Range
————————————————
Start Port : 49152
Number of Ports : 16384
為加速驗證,調整可用的 Ports 數量
netsh int ipv4 set dynamicport tcp start=49152 num=255
執行成功 console 會回應 Ok.
接著開始執行測試程式,loop 99999 次 using HttpClient 連線存取 http://example.com
測試中可透過 powershell 的 Get-NetTCPConnection 指令觀察, 取得 example.com 的語法部分需用小括號括起來才可以正確的過濾到條件 (不知道沒小括號時 powershell 把他當什麼去了...)
Get-NetTCPConnection |
where {$_.RemotePort -eq 80
-and $_.RemoteAddress -eq ([System.Net.Dns]::GetHostAddresses('example.com').IPAddressToString)}
也可以下 measure 來看看取出來的資料總筆數是多少
Get-NetTCPConnection |
where {$_.RemotePort -eq 80
-and $_.RemoteAddress -eq ([System.Net.Dns]::GetHostAddresses('example.com').IPAddressToString)} |
measure
繼續觀察測試 console 上的連線進行到第幾次,可以看到在連線進行到 252 次之後出現了 tcp 資源耗盡導致的 exception 的狀況
此時的 tcp 佔用數量是 254
調整寫法後重新進行測試,確認 loop 怎麼跑,確認發起的連線次數已經遠超過上限值 255,但佔用的 tcp 連線永遠只有 1
ref:
沒有留言:
張貼留言