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 =
[root@node118 ~]#

3>.执行上述命令后,再次查看bond0的网卡配置信息

二.socket读写缓冲区调优

   实际上,调整Kafka的网络配置与其他的配置是一样的。首先可以对分配给socket读写缓冲区的内存大小作出调整,这样可以显著提升网络的传输性能。

1>.默认的TCP数据发送窗口大小(字节)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/wmem_default                                       #对应net.core.wmem_default这个参数 

[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.wmem_default
net.core.wmem_default =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# echo "net.core.wmem_default=256960" >> /etc/sysctl.conf     #我这里设置发送大小为256KB
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -p
vm.swappiness =
vm.dirty_background_ratio =
vm.dirty_ratio =
net.ipv6.conf.all.disable_ipv6 =
net.core.wmem_default =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.wmem_default
net.core.wmem_default =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]#

2>.默认的TCP数据接收窗口大小(字节)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/rmem_default                                    #对应的参数是net.core.rmem_default

[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.rmem_default
net.core.rmem_default =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# echo "net.core.rmem_default=256960" >> /etc/sysctl.conf #我这里接受大小设置的是256KB
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -p
vm.swappiness =
vm.dirty_background_ratio =
vm.dirty_ratio =
net.ipv6.conf.all.disable_ipv6 =
net.core.wmem_default =
net.core.rmem_default =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.rmem_default
net.core.rmem_default =
[root@yinzhengjie ~]#

3>.最大的TCP数据发送窗口(字节)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/wmem_max                                    #对应的参数是:net.core.wmem_max

[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.wmem_max
net.core.wmem_max =
[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 =
vm.dirty_background_ratio =
vm.dirty_ratio =
net.ipv6.conf.all.disable_ipv6 =
net.core.wmem_default =
net.core.rmem_default =
net.core.wmem_max =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.wmem_max
net.core.wmem_max =
[root@yinzhengjie ~]#  

4>.最大的TCP数据接收窗口(字节)。

[root@yinzhengjie ~]# cat /proc/sys/net/core/rmem_max                                #对应参数是:net.core.rmem_max

[root@yinzhengjie ~]#
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.rmem_max
net.core.rmem_max =
[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 =
vm.dirty_background_ratio =
vm.dirty_ratio =
net.ipv6.conf.all.disable_ipv6 =
net.core.wmem_default =
net.core.rmem_default =
net.core.wmem_max =
net.core.rmem_max =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.core.rmem_max
net.core.rmem_max =
[root@yinzhengjie ~]#

  温馨提示:最大值并不意味着每个socket一定要有这么大大缓冲空间,只是说在必要大情况下才会达到这个值。

 

三.TCP socket的读写缓冲区调优

  除了设置socket外,我们还需要设置TCP socket的读写缓冲区。

1>.为自动调优定义socket使用的发送内存(写)。

[root@yinzhengjie ~]# cat /proc/sys/net/ipv4/tcp_wmem                #对应参数:net.ipv4.tcp_wmem

[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_wmem
net.ipv4.tcp_wmem = #第一个值是为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 =
vm.dirty_background_ratio =
vm.dirty_ratio =
net.ipv6.conf.all.disable_ipv6 =
net.core.wmem_default =
net.core.rmem_default =
net.core.wmem_max =
net.core.rmem_max =
net.ipv4.tcp_wmem =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_wmem
net.ipv4.tcp_wmem =
[root@yinzhengjie ~]#

2>. 为自动调优定义socket使用的接受内存(读)。

[root@yinzhengjie ~]# cat /proc/sys/net/ipv4/tcp_rmem            #对应参数为:net.ipv4.tcp_rmem

[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = #第一个值是为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 =
vm.dirty_background_ratio =
vm.dirty_ratio =
net.ipv6.conf.all.disable_ipv6 =
net.core.wmem_default =
net.core.rmem_default =
net.core.wmem_max =
net.core.rmem_max =
net.ipv4.tcp_wmem =
net.ipv4.tcp_rmem =
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# sysctl -q net.ipv4.tcp_rmem
net.ipv4.tcp_rmem =
[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不响应。

 

Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小的更多相关文章

  1. 大战C100K之-Linux内核调优篇--转载

    原文地址:http://joyexpr.com/2013/11/22/c100k-4-kernel-tuning/ 早期的系统,系统资源包括CPU.内存等都是非常有限的,系统为了保持公平,默认要限制进 ...

  2. 关于Linux网卡调优之:RPS (Receive Packet Steering)

    昨天在查LVS调度均衡性问题时,最终确定是 persistence_timeout 参数会使用IP哈希.目的是为了保证长连接,即一定时间内访问到的是同一台机器.而我们内部系统,由于出口IP相对单一,所 ...

  3. 大数据集群Linux CentOS 7.6 系统调优篇

    大数据集群Linux CentOS 7.6 系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设置主机hosts文件 1>.修改主机名 [root@node100 ...

  4. Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio”

      Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio” 作者:尹正杰 版权声明:原创作品,谢绝转载 ...

  5. 《Kafka权威指南》读书笔记-操作系统调优篇

    <Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...

  6. linux性能调优概述

    - 什么是性能调优?(what) - 为什么需要性能调优?(why) - 什么时候需要性能调优?(when) - 什么地方需要性能调优?(where) - 什么人来进行性能调优?(who) - 怎么样 ...

  7. Linux内核调优参数说明

    该脚本是我常用的系统安装后执行脚本,包括开机启动服务.内核.SSH优化. !/bin/sh 服务优化,(sshd.network.crond.syslog.rsyslog)服务保持默认开机启动 Ser ...

  8. MySQL 数据库规范--调优篇(终结篇)

    前言 这篇是MySQL 数据库规范的最后一篇--调优篇,旨在提供我们发现系统性能变弱.MySQL系统参数调优,SQL脚本出现问题的精准定位与调优方法. 目录 1.MySQL 调优金字塔理论 2.MyS ...

  9. Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)

    Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...

随机推荐

  1. ES系列十五、ES常用Java Client API

    一.简介 1.先看ES的架构图 二.ES支持的客户端连接方式 1.REST API http请求,例如,浏览器请求get方法:利用Postman等工具发起REST请求:java 发起httpClien ...

  2. Web.xml中Filter过滤器标签几个说明

    在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法: <!-- 定义Filter ...

  3. Luogu5289 十二省联考2019字符串问题(后缀数组+拓扑排序+线段树/主席树/KDTree)

    先考虑80分做法,即满足A串长度均不小于B串,容易发现每个B串对应的所有A串在后缀数组上都是一段连续区间,线段树优化连边然后判环求最长链即可.场上就写了这个. 100分也没有什么本质区别,没有A串长度 ...

  4. win10系统同时安装python2.7和python3.6

    我是先在本机上安装的python3.6.5,因为要学习一个框架,但是这个框架只支持python2,所以我又安装了python2.7.15,并且配置到系统环境变量 环境变量配置了python3.6.5的 ...

  5. 【BZOJ3813】【清华集训2014】奇数国 线段树 数学

    题目描述 给你一个长度为\(n\)的数列,第\(i\)个数为\(a_i\).每个数的质因子都只有前\(60\)个质数.有\(q\)个询问,每次给你\(l,r\),求\(\varphi(\prod_{i ...

  6. 常用 git 基础命令

    git config --global credential.helper store记住密码 git config user.name xxx配置帐号 git config user.email x ...

  7. Windows系统下在Git Bash中把文件内容复制到剪贴板的命令

    众所周知,在OS系统中,复制文件内容到剪贴板(比如复制公钥到剪贴板)的命令是: pbcopy < ~/.ssh/id_rsa.pub 在Win7或者Win10下这条命令就没用了.可以这样: cl ...

  8. 【刷题】LOJ 556 「Antileaf's Round」咱们去烧菜吧

    题目描述 你有 \(m\) 种物品,第 \(i\) 种物品的大小为 \(a_i\) ​,数量为 \(b_i\)​( \(b_i=0\) 表示有无限个). 你还有 \(n\) 个背包,体积分别为 \(1 ...

  9. LOJ#6284. 数列分块入门 8

    分块的时候开一个数组标记这个区间是不是都是一样颜色的部分,如果是的话,我后面的查询,更新部分就可以直接整块操作,对于不是不全部都一样颜色的块在具体进到快里面去暴力. 在更新的时候对边上的两个不完整的块 ...

  10. 20165223 结对编程之四则运算week2-整体总结

    目录 一.结对对象 二.需求分析 三.设计思路 四.核心代码 五.功能截图 六.结对感受 一.结对对象 担任角色(本周交换角色,流动学习) 驾驶员(Driver):20165218 赵冰雨(是控制键盘 ...