生产环境 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-dive | Linux 内存管理深潜(vm.swappiness/vm.min_free_kbytes 等参数详解) |
| container-networking-troubleshooting | 容器网络排障 6 层模型(rp_filter/ip_forward 参数实战场景) |
| linux-load-average-guide | Load Average 与内存压力关联排查 |
| linux-kernel-tuning-guide | Linux 高并发内核优化手册 — 文件句柄/网络/内存/安全四维调优(含 sysctl 配置模板) |
| linux-perf-troubleshooting-handbook | Linux 服务器性能排查实战手册 — 60 秒快速摸底/4 大瓶颈排查/3 个实战案例/监控阈值/ |
| linux-nfs-mount-parameters-guide | NFS 挂载参数全解析(内核参数与 NFS 模块调优互补) |