我們這裡應用的是centos5.3,並核心使用的是2.6.18-128.el5pae #1 smp 。修改部分tcp ,有的是為了提高效能與負載,但是存在降低穩定性的風險。有的則是安全方面的配置,則有可能犧牲了效能。
1.tcp keepalive tcp連線保鮮設定
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_timekeepalive是tcp保鮮定時器。當網路兩端建立了tcp連線之後,閒置idle(雙方沒有任何資料流傳送往來)了tcp_keepalive_time後,伺服器echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
核心就會嘗試向客戶端傳送偵測包,來判斷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_backlogtcp_max_syn_backlog syn佇列的長度,時常稱之為未建立連線佇列。系統核心維護著這樣的乙個佇列,用於容納狀態為syn_resc的tcp連線(half-open connection),即那些依然尚未得到客戶端確認(ack)的tcp連線請求。加大該值,可以容納更多的等待連線的網路連線數。echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
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_timeouttcp_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秒。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_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_maxrmem_max 定義了接收視窗可以使用的最大值,可以根據bdp值進行調節。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
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)效能調優僅在於需要的時候進行調整,調整以後需要採集資料與基準測試資料進行比較。建議,不需要盲從地調整這些引數。
原文發布時間為:2013-05-29
Linux TCP 系統引數配置
我們這裡應用的是centos5.3,並核心使用的是2.6.18 128.el5pae 1 smp 修改部分tcp 有的是為了提高效能與負載,但是存在降低穩定性的風險。有的則是安全方面的配置,則有可能犧牲了效能。1.tcp keepalive tcp連線保鮮設定 echo 1800 proc sys ...
Linux TCP異常引數指導
參考.com client使用tcp發出的包,要重傳幾次 net.ipv4.tcp syn retries 6 kernel.shmall 4294967296 net.ipv4.tcp max syn backlog 32768 net.core netdev max backlog 32768 ...
Linux TCP 緩衝區引數調優
系統原值 wqf admin autopush cat proc sys net core rmem max 4194304 wqf admin autopush cat proc sys net core wmem max 1048576 wqf admin autopush cat proc s...