1. 程式人生 > 實用技巧 >TCP&IP及核心引數優化調優

TCP&IP及核心引數優化調優

一、TCP/IP及核心引數優化調優
Linux下TCP/IP及核心引數優化有多種方式,引數配置得當可以大大提高系統的效能,也可以根據特定場景進行專門的優化,如TIME_WAIT過高,DDOS攻擊等等。
如下配置是寫在sysctl.conf中,可使用sysctl -p生效,
相關引數僅供參考,具體數值還需要根據機器效能,應用場景等實際情況來做更細微調整。
 
net.core.netdev_max_backlog = 400000
#該引數決定了,網路裝置接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目。

net.core.optmem_max = 10000000
#該引數指定了每個套接字所允許的最大緩衝區的大小

net.core.rmem_default = 10000000
#指定了接收套接字緩衝區大小的預設值(以位元組為單位)。

net.core.rmem_max = 10000000
#指定了接收套接字緩衝區大小的最大值(以位元組為單位)。

net.core.somaxconn = 100000
#Linux kernel引數,表示socket監聽的backlog(監聽佇列)上限

net.core.wmem_default = 11059200
#定義預設的傳送視窗大小;對於更大的 BDP 來說,這個大小也應該更大。

net.core.wmem_max = 11059200
#定義傳送視窗的最大大小;對於更大的 BDP 來說,這個大小也應該更大。

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
#嚴謹模式 1 (推薦)
#鬆散模式 0

net.ipv4.tcp_congestion_control = bic
#預設推薦設定是 htcp

net.ipv4.tcp_window_scaling = 0
#關閉tcp_window_scaling
#啟用 RFC 1323 定義的 window scaling;要支援超過 64KB 的視窗,必須啟用該值。

net.ipv4.tcp_ecn = 0
#把TCP的直接擁塞通告(tcp_ecn)關掉

net.ipv4.tcp_sack = 1
#關閉tcp_sack
#啟用有選擇的應答(Selective Acknowledgment),
#這可以通過有選擇地應答亂序接收到的報文來提高效能(這樣可以讓傳送者只發送丟失的報文段);
#(對於廣域網通訊來說)這個選項應該啟用,但是這會增加對 CPU 的佔用。

net.ipv4.tcp_max_tw_buckets = 10000         #也可以改為更大,比如40000
#表示系統同時保持TIME_WAIT套接字的最大數量

net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN佇列長度,預設1024,改成8192,可以容納更多等待連線的網路連線數。

net.ipv4.tcp_syncookies = 1
#表示開啟SYN Cookies。當出現SYN等待佇列溢位時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉;

net.ipv4.tcp_timestamps = 1
#開啟TCP時間戳
#以一種比重發超時更精確的方法(請參閱 RFC 1323)來啟用對 RTT 的計算;
為了實現更好的效能應該啟用這個選項!!!

net.ipv4.tcp_tw_reuse = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連線,預設為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1
#表示開啟TCP連線中TIME-WAIT sockets的快速回收,預設為0,表示關閉。
檢視TIME-WAIT
#netstat -an | awk '{print $6}' | sort | uniq -c | sort -nr
   1029 TIME_WAIT
    153 ESTABLISHED
     86 CONNECTED
     11 LISTEN
      8 STREAM
      4 CLOSE_WAIT
      1 I-Node
      1 Foreign
      1 established)
      1 and
      1 887148537
      1 420746
      1 3776925111
      1 302323132
      1 18379
      1 17938
      1 17877
      1 17708
      1 1538616640
      1 1538613887
      1 1509114552
      1 14639
      1 14638
      1 14621
net.ipv4.tcp_fin_timeout = 10      #測試過改為15
#表示如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間。

net.ipv4.tcp_keepalive_time = 1800
#表示當keepalive起用的時候,TCP傳送keepalive訊息的頻度。預設是2小時,改為30分鐘。

net.ipv4.tcp_keepalive_probes = 3
#如果對方不予應答,探測包的傳送次數

net.ipv4.tcp_keepalive_intvl = 15
#keepalive探測包的傳送間隔

net.ipv4.tcp_mem
#確定 TCP 棧應該如何反映記憶體使用;每個值的單位都是記憶體頁(通常是 4KB)。
#第一個值是記憶體使用的下限。
#第二個值是記憶體壓力模式開始對緩衝區使用應用壓力的上限。
#第三個值是記憶體上限。在這個層次上可以將報文丟棄,從而減少對記憶體的使用。對於較大的 BDP 可以增大這些值(但是要記住,其單位是記憶體頁,而不是位元組)。

net.ipv4.tcp_rmem
#與 tcp_wmem 類似,不過它表示的是為自動調優所使用的接收緩衝區的值。

net.ipv4.tcp_wmem = 30000000 30000000 30000000
#為自動調優定義每個 socket 使用的記憶體。
#第一個值是為 socket 的傳送緩衝區分配的最少位元組數。
#第二個值是預設值(該值會被 wmem_default 覆蓋),緩衝區在系統負載不重的情況下可以增長到這個值。
#第三個值是傳送緩衝區空間的最大位元組數(該值會被 wmem_max 覆蓋)。

net.ipv4.ip_local_port_range = 1024 65000
#表示用於向外連線的埠範圍。預設情況下很小:32768到61000,改為1024到65000。

net.ipv4.netfilter.ip_conntrack_max=204800
#設定系統對最大跟蹤的TCP連線數的限制

net.ipv4.tcp_slow_start_after_idle = 0
#關閉tcp的連線傳輸的慢啟動,即先休止一段時間,再初始化擁塞視窗。

net.ipv4.route.gc_timeout = 100
#路由快取重新整理頻率,當一個路由失敗後多長時間跳到另一個路由,預設是300。

net.ipv4.tcp_syn_retries = 1
#在核心放棄建立連線之前傳送SYN包的數量。

net.ipv4.icmp_echo_ignore_broadcasts = 1
# 避免放大攻擊

net.ipv4.icmp_ignore_bogus_error_responses = 1
# 開啟惡意icmp錯誤訊息保護

net.inet.udp.checksum=1
#防止不正確的udp包的攻擊

net.ipv4.conf.default.accept_source_route = 0
#是否接受含有源路由資訊的ip包。引數值為布林值,1表示接受,0表示不接受。
#在充當閘道器的linux主機上預設值為1,在一般的linux主機上預設值為0。
#從安全性角度出發,建議你關閉該功能
###############################################
二、一個案例1:生產環境遇到一個問題,發現messages中有很多類似如下的日誌:
Aug 17 16:39:28 localhost kernel: __ratelimit: 45 callbacks suppressed
Aug 17 16:39:28 localhost kernel: TCP: time wait bucket table overflow
然後修改瞭如下引數:
#sysctl -p
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_max_tw_buckets = 50000
後來就發現沒有在出現類似上面的日誌了。
三、一個案例2:如果伺服器使用了NAT的功能就不能開啟timestamps了
net.ipv4.tcp_timestamps = 1 預設值是1,如果使用了NAT的功能,就改為0!

轉載連線:http://www.cnblogs.com/jking10/p/5472386.html