
# 修改节点内核参数
由于默认的Linux内核参数不一定符合所有用户场景，用户可通过修改节点上的/etc/sysctl.conf配置文件来更改内核参数。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/notice_3.0-zh-cn.png)
- 修改节点系统参数的命令仅在使用公共镜像时有效，使用私有镜像时本文中提供的命令仅供参考。
- 节点重启后需执行**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的目的。  - kube-proxy参数conntrack-min会自动对内核nf_conntrack_max进行调整，如需修改nf_conntrack_max，建议优先修改kube-proxy参数，详情请参见[kube-proxy组件配置](https://support.huaweicloud.com/usermanual-cce/cce_10_0652.html#cce_10_0652__section223816513111)。   | 系统默认值已经根据节点内存大小浮动配置。如需修改，可参考以下公式： - 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
     ```
     
   
   
   下图中命令仅做示例，请根据实际情况填写。
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001366893137.png "点击放大")
   
   
4. 节点创建完成后，登录节点执行[表1]中的查看参数命令检查是否修改成功。
 
