Linux内核参数优化

作者: Jon_Wong | 来源:发表于2018-05-14 15:45 被阅读27次

    压测ceph集群以便评估几家厂商的送测设备,其中一家的设备很奇怪,fio同时压测所有硬盘能达到机械硬盘的极限值,但是fio压ceph rbd就是跑不满,为此调整了几个Linux内核参数,每块盘的iops显著提升,总的来讲TCP参数的调整带来的改善要大得多,这个跟ceph的数据模型设计有大的关系吧。

    目标文件/etc/sysctl.conf,参数调整如下:

    net.ipv4.tcp_mtu_probing=1

    为了提高ceph集群节点间的数据同步性能,我们开启了jump frame,并且设定值为9000(标准的报文传输量是1500,超过这个值报文就会被分段,影响性能,因此巨帧可以减少报文分段),但是巨帧(jump frame)有个缺陷,就是一旦出现错误或者丢包,重新组织并发送这个包就会大大影响传输效率。因此这个参数开启了PLPMTUD(Packetization Layer Path MTU Discovery),相比于之前的PMTUD(最大传输单元路径发现),大大提升了健壮性。参考至rfc4821

    net.netfilter.nf_conntrack_max = 1048576

    调高conntrack最大值,conntrack(连接跟踪)用来跟踪和记录一个连接的状态

    kernel.pid_max = 4194303

    调整创建的进程数上限

    vm.swappiness = 10

    使用磁盘swap分区的比例,默认值为60,但是在内存足够大时,调成10可以提高性能,调成0就只使用物理内存

    vm.vfs_cache_pressure = 50

    默认值是100,超过100时,内核会高优先清理缓存

    net.core.rmem_max = 56623104

    最大的TCP数据接收缓冲

    net.core.wmem_max = 56623104

    最大的TCP数据发送缓冲

    net.core.rmem_default = 56623104

    net.core.wmem_default = 56623104

    同上,默认值

    net.core.optmem_max = 40960

    每个套接字允许的最大缓冲区大小

    net.ipv4.tcp_rmem = 4096 87380 56623104

    为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数;第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)

    net.ipv4.tcp_wmem = 4096 65536 56623104

    为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数;第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)

    net.core.somaxconn = 1024

    系统中每一个端口最大的监听队列的长度,默认是128

    Increase number of incoming connections backlog, default is 1000

    net.core.netdev_max_backlog = 50000

    在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目

    Maximum number of remembered connection requests, default is 128

    net.ipv4.tcp_max_syn_backlog = 30000

    对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器经常出现过载,可以尝试增加这个数字

    Increase the tcp-time-wait buckets pool size to prevent simple DOS attacks, default is 8192

    net.ipv4.tcp_max_tw_buckets = 2000000

    表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息

    Recycle and Reuse TIME_WAIT sockets faster, default is 0 for both
    net.ipv4.tcp_tw_recycle = 1

    表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

    net.ipv4.tcp_tw_reuse = 1

    表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。为了对NAT设备更友好,建议设置为0

    Decrease TIME_WAIT seconds, default is 30 seconds

    net.ipv4.tcp_fin_timeout = 10

    修改系統默认的 TIMEOUT 时间

    Tells the system whether it should start at the default window size only for TCP connections that have been idle for too long, default is 1

    net.ipv4.tcp_slow_start_after_idle = 0

    设置为0,一个tcp连接在空闲后不进入slow start阶段,即每次收发数据都直接使用高速通道,平均延时43毫秒,跟计算的理论时间一致

    If your servers talk UDP, also up these limits, default is 4096

    net.ipv4.udp_rmem_min = 8192

    UDP接收缓存区最小值

    net.ipv4.udp_wmem_min = 8192

    UDP输出缓存区最小值

    Disable source redirects
    Default is 1

    net.ipv4.conf.all.send_redirects = 0

    禁止转发重定向报文

    net.ipv4.conf.all.accept_redirects = 0

    禁止接收路由重定向报文,防止路由表被恶意更改

    Disable source routing, default is 0

    net.ipv4.conf.all.accept_source_route = 0

    禁止包含源路由的ip包

    相关文章

      网友评论

        本文标题:Linux内核参数优化

        本文链接:https://www.haomeiwen.com/subject/sbhjdftx.html