TCP參數的用法

我們這裏應用的是CentOS5.3,並內核使用的是2.6.18-128.el5PAE #1 SMP 。修改部分TCP ,有的是爲了提高性能與負載,但是存在降低穩定性的風險。有的則是安全方面的配置,則有可能犧牲了性能。

1.TCP keepalive TCP連接保鮮設置

echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes

keepalive是TCP保鮮定時器。當網絡兩端建立了TCP連接之後,閒置idle(雙方沒有任何數據流發送往來)了tcp_keepalive_time後,服務器內 核就會嘗試向客戶端發送偵測包,來判斷TCP連接狀況(有可能客戶端崩潰、強制關閉了應用、主機不可達等等)。如果沒有收到對方的回答(ack包),則會 在tcp_keepalive_intvl後再次嘗試發送偵測包,直到收到對對方的ack,如果一直沒有收到對方的ack,一共會嘗試 tcp_keepalive_probes次,每次的間隔時間在這裏分別是15s, 30s, 45s, 60s, 75s。如果嘗試tcp_keepalive_probes,依然沒有收到對方的ack包,則會丟棄該TCP連接。

2. syn cookies設置

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

在CentOS5.3中,該選項默認值是1,即啓用syn cookies功能。我們建議先關閉,直到確定受到syn flood***的時候再開啓syn cookies功能,有效地防止syn flood***。也可以通過iptables規則拒絕syn flood***。

3.TCP  連接建立設置

echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries

tcp_max_syn_backlog  SYN隊列的長度,時常稱之爲未建立連接隊列。系統內核維護着這樣的一個隊列,用於容納狀態爲SYN_RESC的TCP連接(half-open connection),即那些依然尚未得到客戶端確認(ack)的TCP連接請求。加大該值,可以容納更多的等待連接的網絡連接數。

tcp_syn_retries  新建TCP連接請求,需要發送一個SYN包,該值決定內核需要嘗試發送多少次syn連接請求才決定放棄建立連接。默認值是5. 對於高負責且通信良好的物理網絡而言,調整爲2

tcp_synack_retries  對於遠端SYN連接請求,內核會發送SYN+ACK數據包來確認收到了上一個SYN連接請求包,然後等待遠端的確認(ack數據包)。該值則指定了內核會 向遠端發送tcp_synack_retires次SYN+ACK數據包。默認設定值是5,可以調整爲2

4. TCP 連接斷開相關設置

echo 30 >  /proc/sys/net/ipv4/tcp_fin_timeout
echo 15000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 >  /proc/sys/net/ipv4/tcp_tw_recycle

tcp_fin_timeout 對於由本端主動斷開連接的TCP連接,本端會主動發送一個FIN數據報,在收到遠端ACK後,且並沒有收到遠端FIN包之前,該TCP連接的狀態是 FIN_WAIT_2狀態,此時當遠端關閉了應用,網絡不可達(拔網張),程序不可斷僵死等等,本端會一直保留狀態爲FIN_WAIT_2狀態的TCP連 接,該值tcp_fin_timeout則指定了狀態爲FIN_WAIT_2的TCP連接保存多長時間,一個FIN_WAIT_2的TCP連接最多佔 1.5k內存。系統默認值是60秒,可以將此值調整爲30秒,甚至10秒。

tcp_max_tw_buckets 系統同時處理TIME_WAIT sockets數目。如果一旦TIME_WAIT tcp連接數超過了這個數目,系統會強制清除並且顯示警告消息。設立該限制,主要是防止那些簡單的DoS***,加大該值有可能消耗更多的內存資源。如果 TIME_WAIT socket過多,則有可能耗盡內存資源。默認值是18w,可以將此值設置爲5000~30000 tcp_tw_resue 是否可以使用TIME_WAIT tcp連接用於建立新的tcp連接。

tcp_tw_recycle 是否開啓快帶回收TIME_WAIT tcp連接的功能。

5. tcp 內存資源使用相參數設定

echo 16777216 > /proc/sys/net/core/rmem_max
echo 16777216 > /proc/sys/net/core/wmem_max
cat /proc/sys/net/ipv4/tcp_mem
echo “4096 65536 16777216″ > /proc/sys/net/ipv4/tcp_rmem
echo “4096 87380 16777216″ > /proc/sys/net/ipv4/tcp_wmem

rmem_max 定義了接收窗口可以使用的最大值,可以根據BDP值進行調節。

wmem_max 定義了發送窗口可以使用的最大值,可以根據BDP什值進行調整。

tcp_mem [low, pressure, high] TCP用這三個值來跟蹤內存使用情況,來限定資源佔用。通常情況下,在系統boot之時,內核會根據可用內存總數計算出這些值。如果出現了Out of socket memory,則可以試着修改這個參數。

1)low: 當TCP使用了低於該值的內存頁面數時,TCP不會考濾釋放內存。

2)pressure: 當TCP使用了超過該值的內存頁面數量,TCP試圖穩定其對內存的佔用,進入pressure模式,直到內存消耗達於low值,退出該模式。

3)hight:允許所有tcp sockets用於排隊緩衝數據報的內存頁數。

tcp_rmem [min, default, max]

1)min 爲每個TCP連接(tcp socket)預留用於接收緩衝的內存數量,即使在內存出現緊張情況下TCP socket都至少會有這麼多數量的內存用於接收緩衝。

2)default 爲TCP socket預留用於接收緩衝的內存數量,默認情況下該值影響其它協議使用的 rmem_default的值,所以有可能被rmem_default覆蓋。

3)max 該值爲每個tcp連接(tcp socket)用於接收緩衝的內存最大值。該值不會影響wmem_max的值,設置了選項參數 SO_SNDBUF則不受該值影響。

tcp_wmem [min, default, max] 如上(tcp_rmen)只不過用於發送緩存。

注:

1)可以通過sysctl -w 或者寫入/etc/sysctl.conf永久保存

2)性能調優僅在於需要的時候進行調整,調整以後需要採集數據與基準測試數據進行比較。建議,不需要盲從地調整這些參數。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章