返回首页

生产环境 Linux 内核参数调优 — 6 个必调参数

📅 创建于 2026-05-08 🔄 更新于 2026-05-12 📝 399 字

生产环境 Linux 内核参数调优

Linux 内核默认配置偏保守,优先控制资源开销,未适配高并发场景。以下是生产环境必调的 6 个内核参数。

① fs.file-max — 全局文件句柄上限

作用: 控制系统所有进程可打开的全局最大文件句柄总数(普通文件、Socket、管道、设备文件等)。

调优原因: 默认值按内存自动计算,高并发下易耗尽。超限后应用抛出 Too many open files,新连接无法建立。

推荐值:

fs.file-max = 1048576   # 1M,通用生产标配

查看当前值/使用率:

sysctl fs.file-max
cat /proc/sys/fs/file-nr

⚠️ 进程级 ulimit -n 设置再高也不能超过此值。


② net.core.somaxconn — TCP 全连接队列

作用: 限制已完成 TCP 三次握手、等待 accept() 处理的全连接队列长度。

调优原因: 默认仅 128,是高并发 TCP 服务最常见的隐性瓶颈。应用内设置再大也被此参数截断。队列溢出时内核直接丢弃新连接,客户端出现 connection refused 或超时。

推荐值:

net.core.somaxconn = 16384

③ vm.swappiness — 内存交换倾向

作用: 控制内核将内存换入 Swap 的积极程度(0~100),越小越优先使用物理内存。

调优原因: 默认 60 对服务器过于激进,物理内存充足时仍会触发 Swap。Swap 基于磁盘,比内存慢上千倍,造成应用延迟抖动、数据库性能暴跌、K8s 节点异常驱逐。

推荐值: | 场景 | 推荐值 | 说明 | |------|--------|------| | 通用服务器 | 10 | 尽量避免 Swap | | 数据库(MySQL/Redis/PG) | 1 | 最大限度避免 Swap | | 低配机器(< 2GB) | 60~80 | 保留 Swap 防 OOM |

vm.swappiness = 10

④ net.core.rmem_max / wmem_max — Socket 收发缓冲区上限

作用: 限定单个 Socket 接收/发送缓冲区的系统全局最大值。

调优原因: 默认仅 ~212KB,远不能满足高带宽要求。缓冲区不足会压制 TCP 吞吐,导致物理网卡带宽无法跑满。

适用场景: 连接数较少但单连接吞吐要求高的业务(文件传输、数据库同步、视频流)。 不适用: 海量长连接场景(高并发短连接不需要)。

推荐值:

net.core.rmem_max = 134217728   # 128MB
net.core.wmem_max = 134217728   # 128MB

⑤ net.ipv4.tcp_max_syn_backlog — TCP 半连接队列

作用: 存放已收到 SYN 包、未完成三次握手的半开连接数量(SYN 队列)。

调优原因: 默认 1024 偏小,高新建连接下易被占满。溢出时即使开启了 tcp_syncookies,部分正常连接也可能被丢弃。

必须与 somaxconn 配套调大,才能完整发挥高并发承载能力。

推荐值:

net.ipv4.tcp_max_syn_backlog = 8192

⑥ net.ipv4.tcp_tw_reuse — TIME_WAIT 连接复用

作用: 允许将处于 TIME_WAIT 状态的端口安全地用于新出站连接。

调优原因: 短连接业务中,客户端端口断开后进入 TIME_WAIT 并保持 60 秒。高频请求下临时端口(约 28k 个)易耗尽,报 Cannot assign requested address

适用场景: NAT 网关、正向代理、调用第三方接口、K8s 节点、Docker 宿主机(仅对主动连接方有效)。

依赖: tcp_timestamps 必须开启(默认已开启)。

推荐值:

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1    # 依赖项,通常默认已开

完整配置模板

保存到 /etc/sysctl.d/99-performance.conf

# 1. 文件句柄上限 (1M)
fs.file-max = 1048576

# 2. TCP 全连接队列
net.core.somaxconn = 16384

# 3. 内存交换倾向
vm.swappiness = 10

# 4. Socket 收发缓冲区上限 (128MB)
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728

# 5. TCP 半连接队列
net.ipv4.tcp_max_syn_backlog = 8192

# 6. TIME_WAIT 连接复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1

立即生效:

sudo sysctl -p /etc/sysctl.d/99-performance.conf

安全加固相关内核参数

以下参数针对网络安全防护,与性能调优不同,应单独放在 /etc/sysctl.d/99-security.conf

# SYN Flood 防护
net.ipv4.tcp_syncookies = 1

# ICMP 安全
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# IP 欺骗防护
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁止代理 ARP
net.ipv4.conf.all.proxy_arp = 0

# 禁止重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

完整安全加固清单参见 server-security-hardening-checklist

关联页面

页面关联点
server-performance-four-dimensions服务器五维排查总纲
linux-memory-management-deep-diveLinux 内存管理深潜(vm.swappiness/vm.min_free_kbytes 等参数详解)
container-networking-troubleshooting容器网络排障 6 层模型(rp_filter/ip_forward 参数实战场景)
linux-load-average-guideLoad Average 与内存压力关联排查
linux-kernel-tuning-guideLinux 高并发内核优化手册 — 文件句柄/网络/内存/安全四维调优(含 sysctl 配置模板)
linux-perf-troubleshooting-handbookLinux 服务器性能排查实战手册 — 60 秒快速摸底/4 大瓶颈排查/3 个实战案例/监控阈值/
linux-nfs-mount-parameters-guideNFS 挂载参数全解析(内核参数与 NFS 模块调优互补)