更新时间:2024-11-06 GMT+08:00
分享

修改节点内核参数

由于默认的Linux内核参数不一定符合所有用户场景,用户可通过修改节点上的/etc/sysctl.conf配置文件来更改内核参数。

  • 修改节点系统参数的命令仅在使用公共镜像时有效,使用私有镜像时本文中提供的命令仅供参考。
  • 节点重启后需执行sysctl -p用于刷新参数值。
表1 节点内核参数列表

参数名称

参数位置

说明

建议值

file-max

/etc/sysctl.conf

系统整体最大文件句柄数,可视业务情况调整。

查看参数:

sysctl fs.file-max

fs.file-max=1048576

nf_conntrack_buckets

nf_conntrack_max

/etc/sysctl.conf

连接跟踪表容量,可视业务场景调整。

计算桶占用率= [nf_conntrack_count] / [nf_conntrack_buckets]。

当占用率持续超过0.7时,可以通过调大buckets值,将占用率调整至0.7以下。

查看参数:

sysctl net.netfilter.nf_conntrack_count
sysctl net.netfilter.nf_conntrack_buckets
sysctl net.netfilter.nf_conntrack_max
说明:

EulerOS 2.3/EulerOS 2.5/CentOS 7.6上net.netfilter.nf_conntrack_buckets不能通过编辑/etc/sysctl.conf进行修改,而是通过修改/sys/module/nf_conntrack/parameters/hashsize达到修改buckets的目的。

系统默认值已经根据节点内存大小浮动配置。如需修改,可参考以下公式:

  • net.netfilter.nf_conntrack_buckets = [nf_conntrack_count] / 0.7
  • net.netfilter.nf_conntrack_max = 4* [nf_conntrack_buckets]

net.netfilter.nf_conntrack_tcp_timeout_close

/etc/sysctl.conf

连接跟踪表里处于close状态连接的表项的过期时间,缩短过期时间可加快回收。

查看参数:

sysctl net.netfilter.nf_conntrack_tcp_timeout_close

net.netfilter.nf_conntrack_tcp_timeout_close=3

net.netfilter.nf_conntrack_tcp_be_liberal

/etc/sysctl.conf

参数值为0或1。

  • 0:表示关闭,所有不在TCP窗口中的包都被标志为无效。
  • 1:表示开启,只有不在TCP窗口内的包被标志为无效。容器场景下,开启这个参数可以避免NAT过的TCP连接带宽受限。

查看参数:

sysctl net.netfilter.nf_conntrack_tcp_be_liberal

net.netfilter.nf_conntrack_tcp_be_liberal=1

tcp_keepalive_time

/etc/sysctl.conf

TCP发送keepalive探测消息的间隔时间。参数值过大可能导致TCP回收时间过长,长时间下造成大量连接卡在Close_wait阶段,耗尽系统资源。

查看参数:

sysctl net.ipv4.tcp_keepalive_time

net.ipv4.tcp_keepalive_time=600

tcp_max_syn_backlog

/etc/sysctl.conf

TCP最大半连接数,SYN_RECV 队列中的最大连接数。

查看参数:

sysctl net.ipv4.tcp_max_syn_backlog

net.ipv4.tcp_max_syn_backlog=8096

tcp_max_tw_buckets

/etc/sysctl.conf

指定任何时候允许存在的处于“time-wait”状态的最大套接字数,参数值过大时易耗尽节点资源。

查看参数:

sysctl net.ipv4.tcp_max_tw_buckets

net.ipv4.tcp_max_tw_buckets=5000

net.core.somaxconn

/etc/sysctl.conf

TCP最大连接数,ESTABLISHED 队列的最大大小,参数值过小时极易不足。

查看参数:

sysctl net.core.somaxconn

net.core.somaxconn=32768

max_user_instances

/etc/sysctl.conf

每个用户允许的最大 inotify 实例数,参数值过小时容器场景下极易不足。

查看参数:

sysctl fs.inotify.max_user_instances

fs.inotify.max_user_instances=8192

max_user_watches

/etc/sysctl.conf

所有监视实例的最大目录数,参数值过小时容器场景极易不足。

查看参数:

sysctl fs.inotify.max_user_watches

fs.inotify.max_user_watches=524288

netdev_max_backlog

/etc/sysctl.conf

网络协议栈收包队列大小,参数值过小时极易不足。

查看参数:

sysctl net.core.netdev_max_backlog

net.core.netdev_max_backlog=16384

net.core.wmem_max

net.core.rmem_max

/etc/sysctl.conf

收发缓冲区内存大小(字节),参数值过小时大文件场景下易不足。

查看参数:

sysctl net.core.wmem_max
sysctl net.core.rmem_max

net.core.wmem_max=16777216

net.core.rmem_max=16777216

net.ipv4.neigh.default.gc_thresh1

net.ipv4.neigh.default.gc_thresh2

net.ipv4.neigh.default.gc_thresh3

/etc/sysctl.conf

ARP表项的垃圾回收调优。

  • gc_thresh1:表示最小可保留的表项数量,如果表项数量小于此值GC(Garbage collector)不进行回收操作。请勿修改。
  • gc_thresh2:当表项数量超过此值时,GC将会清空大于5秒的表项。请勿修改。
  • gc_thresh3:最大可允许的非永久表项数量。如果系统拥有庞大的接口数量,或者直连了大量的设备,应增大此值。

查看参数:

sysctl net.ipv4.neigh.default.gc_thresh1
sysctl net.ipv4.neigh.default.gc_thresh2
sysctl net.ipv4.neigh.default.gc_thresh3

net.ipv4.neigh.default.gc_thresh1=0

net.ipv4.neigh.default.gc_thresh2=4096

net.ipv4.neigh.default.gc_thresh3=163790

vm.max_map_count

/etc/sysctl.conf

参数值过小时,安装elk时会提示不足。

查看参数:

sysctl vm.max_map_count

vm.max_map_count=262144

修改节点内核参数

节点内核参数如表1所示,此处以修改TCP发送keepalive探测消息的间隔时间tcp_keepalive_time为例。

  1. 登录节点,查看/etc/sysctl.conf文件。

    cat /etc/sysctl.conf

  2. 修改net.ipv4.tcp_keepalive_time参数,net.ipv4.tcp_keepalive_time=600为内核参数名称及建议值,建议值请参考表1

    如需修改其他内核参数,请参考表1,替换命令中的参数名称及参数值。

    • 若查看sysctl.conf文件时,文件中已设置net.ipv4.tcp_keepalive_time值,可通过以下命令进行修改。
      sed -i "s/net.ipv4.tcp_keepalive_time=[0-9]*$/net.ipv4.tcp_keepalive_time=600/g" /etc/sysctl.conf && sysctl -p
    • 若查看sysctl.conf文件时,文件中还未设置net.ipv4.tcp_keepalive_time值,可通过以下命令添加。
      echo net.ipv4.tcp_keepalive_time=600 >> /etc/sysctl.conf && sysctl -p

  3. 执行表1中的查看参数命令检查是否修改成功,当返回与修改值一致时说明修改正确。

    # sysctl net.ipv4.tcp_keepalive_time
    net.ipv4.tcp_keepalive_time = 600

创建节点/节点池时自动配置内核参数

您可以设置节点或节点池安装后执行脚本,在新建节点或节点池时通过脚本配置内核参数。

此处以修改TCP发送keepalive探测消息的间隔时间tcp_keepalive_time为例,取值为表1中的建议值。

  1. 首先您需要确认创建节点或节点池的操作系统,例如CentOS 7.6。
  2. 同集群、同操作系统的节点上进行脚本命令可行性的测试,在节点上手动执行命令,确认脚本命令可行。手动执行脚本命令请参考修改节点内核参数
  3. (以下命令需在手动执行命令验证成功后配置)在创建节点或节点池时,在“高级配置 > 安装后执行脚本”中添加可执行的脚本命令。如需修改其他内核参数,请参考表1,替换命令中的参数名称及参数值。

    • 登录节点查看/etc/sysctl.conf文件,若文件中已设置net.ipv4.tcp_keepalive_time值,可通过以下命令进行修改。
      sed -i "s/net.ipv4.tcp_keepalive_time=[0-9]*$/net.ipv4.tcp_keepalive_time=600/g" /etc/sysctl.conf && sysctl -p
    • 登录节点查看/etc/sysctl.conf文件,若文件中还未设置net.ipv4.tcp_keepalive_time值,可通过以下命令添加。
      echo net.ipv4.tcp_keepalive_time=600 >> /etc/sysctl.conf && sysctl -p

    下图中命令仅做示例,请根据实际情况填写。

  4. 节点创建完成后,登录节点执行表1中的查看参数命令检查是否修改成功。

相关文档