Linux網卡調優篇-禁用ipv6與優化socket緩衝區大小

              Linux網卡調優篇-禁用ipv6與優化socket緩衝區大小node

                                           做者:尹正傑緩存

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。服務器

 

   通常在內網環境中,咱們幾乎是用不到IPV6,所以咱們沒有必要把多不用的功能開起來從而浪費沒必要要的資源。默認狀況下,系統內核沒有針對快速的的大流量網絡傳輸進行優化,因此對於應用程序來講,通常須要對Linux系統的網絡棧進行調優,以實現對大流量的支持。網絡

 

一.禁用IPv6圖解app

1>.使用ifconfig查看網卡信息(若是沒有該工具,直接yum按照響應的工具包便可:[root@node118 ~]# yum -y install net-tools )socket

2>. 禁用IPV6的步驟tcp

[root@node118 ~]# echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
[root@node118 ~]# 
[root@node118 ~]# echo "NETWORKING_IPV6=no" >> /etc/sysconfig/network
[root@node118 ~]# 
[root@node118 ~]# echo NETWORKING_IPV6=no >> /etc/sysconfig/network-scripts/ifcfg-bond0 
[root@node118 ~]# 
[root@node118 ~]# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
[root@node118 ~]# 

3>.執行上述命令後,再次查看bond0的網卡配置信息 工具

 

 

二.socket讀寫緩衝區調優性能

   實際上,調整Kafka的網絡配置與其餘的配置是同樣的。首先能夠對分配給socket讀寫緩衝區的內存大小做出調整,這樣能夠顯著提高網絡的傳輸性能。優化

1>.默認的TCP數據發送窗口大小(字節)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/wmem_default                                       #對應net.core.wmem_default這個參數 
212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.wmem_default
net.core.wmem_default = 212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# echo "net.core.wmem_default=256960" >> /etc/sysctl.conf                #我這裏設置發送大小爲256KB
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -p
vm.swappiness = 1
vm.dirty_background_ratio = 5
vm.dirty_ratio = 80
net.ipv6.conf.all.disable_ipv6 = 1
net.core.wmem_default = 256960
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.wmem_default                        
net.core.wmem_default = 256960
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# 

2>.默認的TCP數據接收窗口大小(字節)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/rmem_default                                    #對應的參數是net.core.rmem_default
212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.rmem_default
net.core.rmem_default = 212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# echo "net.core.rmem_default=256960" >> /etc/sysctl.conf                     #我這裏接受大小設置的是256KB
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -p
vm.swappiness = 1
vm.dirty_background_ratio = 5
vm.dirty_ratio = 80
net.ipv6.conf.all.disable_ipv6 = 1
net.core.wmem_default = 256960
net.core.rmem_default = 256960
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.rmem_default
net.core.rmem_default = 256960
[root@yinzhengjie ~]# 

3>.最大的TCP數據發送窗口(字節)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/wmem_max                                    #對應的參數是:net.core.wmem_max
212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.wmem_max
net.core.wmem_max = 212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# echo "net.core.wmem_max=2097152" >> /etc/sysctl.conf                 #我這裏將最大的TCP數據發送緩衝區最大值爲2M          
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -p
vm.swappiness = 1
vm.dirty_background_ratio = 5
vm.dirty_ratio = 80
net.ipv6.conf.all.disable_ipv6 = 1
net.core.wmem_default = 256960
net.core.rmem_default = 256960
net.core.wmem_max = 2097152
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.wmem_max                         
net.core.wmem_max = 2097152
[root@yinzhengjie ~]#  

4>.最大的TCP數據接收窗口(字節)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/rmem_max                                #對應參數是:net.core.rmem_max
212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.rmem_max
net.core.rmem_max = 212992
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# echo "net.core.rmem_max=2097152" >> /etc/sysctl.conf                     #我這裏將TCP數據接受緩衝區的最大值設置爲2M
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -p
vm.swappiness = 1
vm.dirty_background_ratio = 5
vm.dirty_ratio = 80
net.ipv6.conf.all.disable_ipv6 = 1
net.core.wmem_default = 256960
net.core.rmem_default = 256960
net.core.wmem_max = 2097152
net.core.rmem_max = 2097152
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.core.rmem_max                         
net.core.rmem_max = 2097152
[root@yinzhengjie ~]# 

  舒適提示:最大值並不意味着每一個socket必定要有這麼大大緩衝空間,只是說在必要大狀況下才會達到這個值。

 

三.TCP socket的讀寫緩衝區調優

   除了設置socket外,咱們還須要設置TCP socket的讀寫緩衝區。

1>.爲自動調優定義socket使用的發送內存(寫)。

[root@yinzhengjie ~]# cat /proc/sys/net/ipv4/tcp_wmem                #對應參數:net.ipv4.tcp_wmem
4096    16384   4194304
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_wmem                        
net.ipv4.tcp_wmem = 4096        16384   4194304                        #第一個值是爲socket發送緩衝區分配的最少字節數;第二個值是默認值(該值會被wmem_default覆蓋),緩衝區在系統負載不重的狀況下能夠增加到這個值;第三個值是發送緩衝區空間的最大字節數(該值會被wmem_max覆蓋)。
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# echo "net.ipv4.tcp_wmem=8760  256960  4088000" >> /etc/sysctl.conf         #根據服務接受的實際狀況,可能須要設置更高的最大值,爲網絡連接提供更大的緩存空間。
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -p
vm.swappiness = 1
vm.dirty_background_ratio = 5
vm.dirty_ratio = 80
net.ipv6.conf.all.disable_ipv6 = 1
net.core.wmem_default = 256960
net.core.rmem_default = 256960
net.core.wmem_max = 2097152
net.core.rmem_max = 2097152
net.ipv4.tcp_wmem = 8760  256960  4088000
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_wmem                                        
net.ipv4.tcp_wmem = 8760        256960  4088000
[root@yinzhengjie ~]# 

2>. 爲自動調優定義socket使用的接受內存(讀)。

[root@yinzhengjie ~]# cat /proc/sys/net/ipv4/tcp_rmem            #對應參數爲:net.ipv4.tcp_rmem
4096    87380   6291456
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = 4096        87380   6291456                #第一個值是爲socket接收緩衝區分配的最少字節數;第二個值是默認值(該值會被rmem_default覆蓋),緩衝區在系統負載不重的狀況下能夠增加到這個值;第三個值是接收緩衝區空間的最大字節數(該值會被rmem_max覆蓋)。
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# echo "net.ipv4.tcp_rmem=8760  256960  4088000" >> /etc/sysctl.conf                  
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -p
vm.swappiness = 1
vm.dirty_background_ratio = 5
vm.dirty_ratio = 80
net.ipv6.conf.all.disable_ipv6 = 1
net.core.wmem_default = 256960
net.core.rmem_default = 256960
net.core.wmem_max = 2097152
net.core.rmem_max = 2097152
net.ipv4.tcp_wmem = 8760  256960  4088000
net.ipv4.tcp_rmem = 8760  256960  4088000
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_rmem                                        
net.ipv4.tcp_rmem = 8760        256960  4088000
[root@yinzhengjie ~]#  

  根據kafka服務器接受不了流量的實際狀況,可能須要設置更高的最大值,爲網絡連接提供更大的緩衝空間。

 

四.其餘網絡參數調優

[root@yinzhengjie ~]# echo "net.ipv4.tcp_window_scaling=1" >> /etc/sysctl.conf                 # 啓用RFC 1323定義的window scaling,要支持超過64KB的TCP窗口,必須啓用該值(1表示啓用),TCP窗口最大至1GB,TCP鏈接雙方都啓用時才生效。


[root@yinzhengjie ~]# echo "net.ipv4.tcp_max_syn_backlog=2048" >> /etc/sysctl.conf             #每個鏈接請求(SYN報文)都須要排隊,直至本地服務器接收,該變量就是控制每一個端口的 TCP SYN隊列長度的。若是鏈接請求多餘該值,則請求會被丟棄。

[root@yinzhengjie ~]# echo "net.core.netdev_max_backlog=2000" >> /etc/sysctl.conf            #該參數定義了當接口收到包的速率大於內核處理包的速率時,設備的輸入隊列中的最大報文數。



[root@yinzhengjie ~]# echo "net.ipv4.tcp_sack=1" >> /etc/sysctl.conf                        #管理TCP的選擇性應答,容許接收端向發送端傳遞關於字節流中丟失的序列號,減小了段丟失時須要重傳的段數目,當段丟失頻繁時,sack是頗有益的。


[root@yinzhengjie ~]# echo "net.ipv4.tcp_fack=1">> /etc/sysctl.conf                              #啓用轉發應答,能夠進行有選擇應答(SACK)從而減小擁塞狀況的發生,這個選項也應該啓用。

[root@yinzhengjie ~]# echo "net.ipv4.tcp_tw_recycle=1">> /etc/sysctl.conf                 #可以更快地回收TIME-WAIT套接字,默認是0。

[root@yinzhengjie ~]# echo "net.ipv4.tcp_timestamps=0" >> /etc/sysctl.conf             #表示再也不檢查時間戳,默認值是開啓的。發現tcp_timestamps默認是開啓,若是再把tcp_tw_recycle設置爲1,則60s內同一源ip主機的socket connect請求中的timestamp必須是遞增的。也就是說服務器打開了 tcp_tw_reccycle了,就會檢查時間戳,若是對方發來的包的時間戳是亂跳的或者說時間戳是滯後的,這樣服務器確定不會回覆,因此服務器就把帶了「倒退」的時間戳的包看成是「recycle的tw鏈接的重傳數據,不是新的請求」,因而丟掉不回包,就出現了開始說的syn不響應。
相關文章
相關標籤/搜索