操作指南

最佳实践

故障处理

API 文档

文档中心 > 云服务器 > 运维指南 > 系统相关 > Linux 实例常用内核参数介绍

Linux 实例常用内核参数介绍

最近更新时间:2020-11-02 09:04:08

腾讯云在 Linux 公有镜像中已默认配置了部分参数,但由于 sysctl 的高度个性化配置,腾讯云建议用户按照自身业务特点单独配置 sysctl。您可通过本文了解腾讯云针对公有云 Linux 公有镜像特殊的默认优化配置及常见配置,并根据业务进行手动调优。

说明:

  • “初始化配置”项为“-”的参数项,均保持官方镜像默认配置。
  • 使用 sysctl -w 命令配置为临时生效,写入 /etc/sysctl.conf 配置永久生效。

网络类

参数说明初始化配置
net.ipv4.tcp_tw_recycle 该参数用于快速回收 TIME_WAIT 连接。关闭时,内核不检查包的时间戳。开启时则会进行检查。
不建议开启该参数,在时间戳非单调增长的情况下,会引起丢包问题,高版本内核已经移除了该参数。
0
net.core.somaxconn 对应三次握手结束,还没有 accept 队列时的 establish 状态。accept 队列较多则说明服务端 accept 效率不高,或短时间内突发了大量新建连接。该值过小会导致服务器收到 syn 不回包,是由于 somaxconn 表满而删除新建的 syn 连接引起。若为高并发业务,则可尝试增大该值,但有可能增大延迟。 128
net.ipv4.tcp_max_syn_backlog 对应半连接的上限,曾用来防御常见的 synflood 攻击,但当 tcp_syncookies=1 时半连接可超过该上限。 -
net.ipv4.tcp_syncookies 对应开启 SYN Cookies,表示启用 Cookies 来处理,可防范部分 SYN 攻击,当出现 SYN 等待队列溢出时也可继续连接。但开启后会使用 SHA1 验证 Cookies,理论上会增大 CPU 使用率。 1
net.core.rmem_default
net.core.rmem_max
net.ipv4.tcp_mem
net.ipv4.tcp_rmem
这些参数配置了数据接收的缓存大小。配置过大容易造成内存资源浪费,过小则会导致丢包。建议判断自身业务是否属于高并发连接或少并发高吞吐量情形,进行优化配置。
  • rmem_default 的理论最优配置策略为带宽/RTT 积,其配置会覆盖 tcp_rmem,tcp_rmem 不单独配置。
  • rmem_max 配置约为 rmem_default 的5倍。
  • tcp_mem 为总的 TCP 占用内存,一般由 OS 自动配置为 CVM 可用内存的3/32、1/8或3/16,tcp_mem 及 rmem_default 也决定了最大并发链接数。
rmem_default
=655360

rmem_max
=3276800
net.core.wmem_default
net.core.wmem_max
net.ipv4.tcp_wmem
这些参数用于配置数据发送缓存,腾讯云平台上数据发送通常不会出现瓶颈,可不做配置。 -
net.ipv4.tcp_keepalive_intvl
net.ipv4.tcp_keepalive_probes
net.ipv4.tcp_keepalive_time
这些参数与 TCP KeepAlive 有关,默认为75/9/7200。表示某个 TCP 连接在空闲7200秒后,内核才发起探测,探测9次(每次75秒)不成功,内核才发送 RST。对服务器而言,默认值比较大,可结合业务调整到30/3/1800。 -
net.ipv4.ip_local_port_range 配置可用端口的范围,请按需调整。 -
tcp_tw_reuse 该参数允许将 TIME-WAIT 状态的 socket 用于新的 TCP 连接。对快速重启动某些占用固定端口的链接有帮助,但基于 NAT 网络有潜在的隐患,高版本内核变为0/1/2三个值,并配置为2。 -
net.ipv4.ip_forward
net.ipv6.conf.all.forwarding
IP 转发功能,若用于 docker 的路由转发场景可将其配置为1。 0
net.ipv4.conf.default.rp_filter 该参数为网卡对接收到的数据包进行反向路由验证的规则,可配置为0/1/2。根据 RFC3704建议,推荐设置为1,打开严格反向路由验证,可防止部分 DDos 攻击及防止 IP Spoofing 等。 -
net.ipv4.conf.default.accept_source_route 根据 CentOS 官网建议,默认不允许接受含有源路由信息的 IP 包。 0
net.ipv4.conf.all.promote_secondaries
net.ipv4.conf.default.promote_secondaries
当主 IP 地址被删除时,第二 IP 地址是否成为新的主 IP 地址。 1
net.ipv6.neigh.default.gc_thresh3
net.ipv4.neigh.default.gc_thresh3
保存在 ARP 高速缓存中的最多记录的限制,一旦高速缓存中的数目高于设定值,垃圾收集器将马上运行。 4096

内存类

参数说明初始化配置
vm.vfs_cache_pressure 原始值为100,表示扫描 dentry 的力度。以100为基准,该值越大内核回收算法越倾向于回收内存。很多基于 curl 的业务上,通常由于 dentry 的积累导致占满所有可用内存,容易触发 OOM 或内核 bug 之类的问题。综合考虑回收频率和性能后,选择配置为250,可按需调整。 250
vm.min_free_kbytes 该值是启动时根据系统可用物理内存 MEM 自动计算出:4 * sqrt(MEM)。其含义是让系统运行时至少要预留出的 KB 内存,一般情况下提供给内核线程使用,该值无需设置过大。当机器包量出现微突发,则有一定概率会出现击穿 vm.min_free_kbytes,造成 OOM。建议大配置的机器下默认将 vm.min_free_kbytes 配置为总内存的1%左右。 -
kernel.printk 内核 printk 函数打印级别,默认配置为大于5。 5 4 1 7
kernel.numa_balancing 该参数表示可以由内核自发的将进程的数据移动到对应的 NUMA 上,但是实际应用的效果不佳且有其他性能影响,redis 的场景下可以尝试开启。 0
kernel.shmall
kernel.shmmax
  • shmmax 设置一次分配 shared memory 的最大长度,单位为 byte。
  • shmall 设置一共能分配 shared memory 的最大长度,单位为 page。
kernel.shmmax
=68719476736

kernel.shmall
=4294967296

进程类

参数说明初始化配置
fs.file-max
fs.nr_open
分别控制系统所有进程和单进程能同时打开的最大文件数量:
  • file-max 由 OS 启动时自动配置,近似为10万/GB。
  • nr_open 为固定值1048576,但为针对用户态打开最大文件数的限制,一般不改动这个值,通常设置 ulimit -n 实现,对应配置文件为 /etc/security/limits.conf。
ulimit 的 open files 为100001
fs.nr_open=1048576
kernel.pid_max 系统内最大进程数,官方镜像默认为32768,可按需调整。 -
kernel.core_uses_pid 该配置决定 coredump 文件生成的时候是否含有 pid。 1
kernel.sysrq 开启该参数后,后续可对 /proc/sysrq-trigger 进行相关操作。 1
kernel.msgmnb
kernel.msgmax
分别表示消息队列中的最大字节数和单个最大消息队列容量。 65536
kernel.softlockup_panic 当配置了 softlockup_panic 时,内核检测到某进程 softlockup 时,会发生 panic,结合 kdump 的配置可生成 vmcore,用以分析 softlockup 的原因。 -

IO 类

参数说明初始化配置
vm.dirty_background_bytes
vm.dirty_background_ratio
vm.dirty_bytes
vm.dirty_expire_centisecs
vm.dirty_ratio
vm.dirty_writeback_centisecs
这部分参数主要配置 IO 写回磁盘的策略:
  • dirty_background_bytes/dirty_bytes 和 dirty_background_ratio/dirty_ratio 分别对应内存脏页阈值的绝对数量和比例数量,一般情况下设置 ratio。
  • dirty_background_ratio 指当文件系统缓存脏页数量达到系统内存百分之多少时(默认10%)唤醒内核的 flush 等进程,写回磁盘。
  • dirty_ratio 为最大脏页比例,当脏页数达到该比例时,必须将所有脏数据提交到磁盘,同时所有新的 IO 都会被阻塞,直到脏数据被写入磁盘,通常会造成 IO 卡顿。系统先会达到 vm.dirty_background_ratio 的条件然后触发 flush 进程进行异步的回写操作,此时应用进程仍然可以进行写操作,如果达到 vm.dirty_ratio 这个参数所设定的值,此时操作系统会转入同步地处理脏页的过程,阻塞应用进程。
  • vm.dirty_expire_centisecs 表示脏页能存活的时间,flush 进程会检查数据是否超过了该时间限制,单位为1/100秒。
  • vm.dirty_writeback_centisecs 表示 flush 进程的唤醒周期,单位为1/100秒。
-
目录