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


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

                                           作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

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

 

一.禁用IPv6圖解

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

2>. 禁用IPV6的步驟

[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不響應。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM