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