1、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。 #從安全性角度出發,建議你關閉該功能 ############################################### 2、一個案例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 後來就發現沒有在出現相似上面的日誌了。 3、一個案例2:若是服務器使用了NAT的功能就不能開啓timestamps了 net.ipv4.tcp_timestamps = 1 默認值是1,若是使用了NAT的功能,就改成0!
轉載鏈接:http://www.cnblogs.com/jking10/p/5472386.htmlhtml