network_tuning

Kernel variables.

We check server kernel variables to see if their values fit the system needs. A non exhaustive list of commands for *NIX servers follows (we use all of these in our production environments):

ARP overflow (for LAN with lots of hosts

# Increase the ipv4 port range:
      sysctl -w net.ipv4.ip_local_port_range="1024 65535"
      # General gigabit tuning:
      sysctl -w net.core.rmem_max=16777216
      sysctl -w net.core.wmem_max=16777216
      sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
      sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
      sysctl -w net.ipv4.tcp_syncookies=1
      # This gives the kernel more memory for tcp which you need with many (100k+) open socket connections
      sysctl -w net.ipv4.tcp_mem="50576   64768   98152"
      sysctl -w net.core.netdev_max_backlog=2500
      # This set the tcp max connections
      sysctl -w net.netfilter.nf_conntrack_max=1233000

Open files limit.

For tcp connections and also for http connections, servers usually require higher than usual numbers of simultaneously open files. In other words, the value returned by the next command should be high enough:

$ ulimit -n

If it’s not (the default value is usually 1024), it must be set up to a bigger number, for instance running the following command:

$ ulimit -n 999999

timeout_timewait 參數

timeout_timewait 值決定了 TCP/IP 必須經過多久,才能釋出已關閉的連線及重複使用它的資源。 這個關閉和釋出的間隔稱為 TIME_WAIT 狀態,或是區段生命期限上限 (2MSL) 狀態的兩倍。 在這段時間內,通往用戶端和伺服器的連線重新開啟的成本,比建立新的連線低。 藉由縮減這個項目的值,TCP/IP 可以更快釋出已關閉的連線,並提供更多資源給新的連線。 如果執行中的應用程式需要快速釋出、建立新連線,或多個連線在 TIME_WAIT 狀態中造成通訊量太低,因而需要進行調整的話,請調整這個參數。

預設值是 240 秒(4 分鐘)。

最小的建議值是 30 秒。 請利用這個程序來檢視或自訂您的值。

echo X > /proc/sys/net/ipv4/tcp_fin_timeout
其中 X 取代成所需要的秒數。

連線待辦事項

您可能需要增加連線待辦事項值,以便接受激增的送入連線要求。 如果同時收到許多連線要求,較大的值會增加受支援的擱置連線數目,從而減少連線失敗的情況。

請利用這個程序來檢視或自訂您的值。

echo X > /proc/sys/net/core/netdev_max_backlog
echo X > /proc/sys/net/core/somaxconn
其中 X 大於激增所預期的連線要求數目。

tcp_keepalive_time

tcp_keepalive_time 值會控制 TCP/IP 試圖驗證閒置中的連線是否仍保留不動的頻率。 如果在這個時間量內沒有活動,就會傳送保持作用中的傳輸。 如果網路保留不動,且友機在作用中,則友機會有回應。 如果您需要敏銳感應友機的遺失,換句話說,您必須更快知道友機已經遺失,請考慮降低這個值。 如果經常會有長時間不活動的閒置連線,但不常有遺失的友機,您可以增加這個值來降低額外負荷。

依預設,當閒置中的連線沒有活動達 7,200 秒(2 小時)時,Linux 會傳送一則保持作用中訊息。 1,800 秒通常是偏好的值,每 30 分鐘會感應一半關閉的連線。

請利用這個程序來檢視或自訂您的值。

echo X > /proc/sys/net/ipv4/tcp_keepalive_time
其中 X 取代成所需要的秒數。

tcp_keepalive_intvl 值

tcp_keepalive_intvl 值決定了當並未收到友機的保持作用中回應時,TCP/IP 重複保持作用中傳輸的頻率。 當連續沒有回應的保持作用中傳輸數目超出 tcp_keepalive_probes 值時,便會中止連線。 如果預期會有長的回應次數,您可能需要增加這個值來降低額外負荷。 如果您需要縮減驗證遺失友機所花的時間,請考慮將這個值或 tcp_keepalive_probes 值減少。

依預設,在回應保持作用中訊息之前,Linux 會在 75 秒內,等待保持作用中回應。 通常 15 秒是能夠較快感應到遺失的友機的偏好值。

請利用這個程序來檢視或自訂您的值。

echo X > /proc/sys/net/ipv4/tcp_keepalive_intvl
其中 X 取代成所需要的秒數。

tcp_keepalive_probes 值

tcp_keepalive_probes 值決定了 TCP/IP 在現有連線上重新傳輸未確認的保持作用中訊息的次數。 如果是低品質網路,您可能需要增加這個值來維護有效的通訊。 如果是高品質網路,您可以縮減這個值來減少驗證友機遺失所花的時間。

依預設,在決定中止連線之前,Linux 會傳送 9 個未確認的保持作用中訊息。 通常 5 是能夠較快感應到遺失的友機的偏好值。

請利用這個程序來檢視或自訂您的值。

echo X > /proc/sys/net/ipv4/tcp_keepalive_probes
其中 X 取代成所需要的未確認的保持作用中重新傳輸次數。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License