TCP 連線數

TcpTimedWaitDelay

TCP的 TIME_WAIT 狀態是指TCP/IP 必須經過多久,才能釋出已關閉的連線及重複使用它的資源。在 Windows 的環境下預設是4分鐘,Ubuntu 的預設是 60秒 (Linux 下則會依據不同 Distribution 版本而有不同的預設值,但都可以調整其時間長短 )。如果程式在短時內會建立大量的Http請求,不管事接收或發送,可以藉由縮減這個項目的值,TCP/IP 可以更快釋出已關閉的連線,提供更多資源給新的連線。

在 windows 下面的修改方式
  1. 啟動 regedit 指令,瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 登錄次機碼,建立名稱為 TcpTimedWaitDelay 的新 REG_DWORD 值。
  2. 將值設為十進位 30,也就是十六進位的 0x0000001e。 這個值會將等待時間設為 30 秒。(不建議低於30秒)
  3. 關閉登錄編輯器。
  4. 停止並重新啟動系統。
Linux 下面的查詢 TIME_WAIT 的值

cat /proc/sys/net/ipv4/tcp_fin_timeout

MaxUserPort

Windows 預設的連外的連接埠是5000個, 也就是說 Web Server對外只能有5000個連線數,即使系統總共可使用的 Ports 有 65536 個,顯然預設值對高併發的網站來說是不夠用的,所以建議修改成 65536

查看目前的連線數

command line: netstat -n | find /C /I "established"
power shell: Get-Counter -Counter \TCPv4\*

查看 Linux 的預設值

command line: cat /proc/sys/net/ipv4/tcp_fin_timeout/ip_local_port_range
通常是 net.ipv4.ip_local_port_range = 32768 61000,這代表能被使用的區間 32768 ~ 61000,可以把它改成 15000 ~ 61000

在 windows 下面的修改方式
  1. 啟動 regedit 指令,瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 登錄次機碼,建立名稱為 MaxUserPort 的新 REG_DWORD 值。
  2. 將值設為65536(10進制)
  3. 關閉登錄編輯器。
  4. 停止並重新啟動系統。

Reference:
http://stackoverflow.com/questions/410616/increasing-the-maximum-number-of-tcp-ip-connections-in-linux