Linux 内核参数调优本质是依据实际负载特征,通过 vmstat、sar 等工具定位内存、网络、CPU 等瓶颈后,针对性调整策略:如降低 swappiness、优化 TCP 队列与 TFO、合理设置调度优先级及 CPU 绑定。

理解 Linux 内核参数调优的本质
内核参数调优不是盲目修改 /sys 或 /proc 下的数值,而是根据实际负载特征,调整内核对内存、网络、进程、文件系统等资源的管理策略。关键在于识别瓶颈——是内存回收太激进?TCP 连接堆积?还是进程调度延迟高?调优前必须用 vmstat、sar、pidstat、ss、perf 等工具 定位真实问题,避免“为调优而调优”。
内存与 OOM 控制:避免服务被误杀
默认情况下,Linux 在内存紧张时会触发 OOM Killer,可能杀死占用内存多但关键的进程(如数据库)。可通过以下方式理性干预:
- 降低 swappiness:设为 1~10(而非默认 60),减少内核倾向使用 swap,优先回收 page cache
- 设置 vm.vfs_cache_pressure:调低至 50~80,减缓 dentry/inode缓存回收速度,提升文件访问效率
- 为关键进程设置 oom_score_adj:例如
echo -900 > /proc/$(pgrep mysqld)/oom_score_adj,降低其被 OOM 选中的概率 - 启用 memory cgroup 限制:配合 systemd 或 cgroup v2,为服务设定 memory.max,让 OOM 发生在容器 / 服务级而非整机
TCP 与网络 栈调优:应对高并发连接场景
Web 服务、API 网关或消息中间件常面临 TIME_WAIT 堆积、连接建立慢、吞吐上不去等问题:
- 重用 TIME_WAIT 套接字:开启
net.ipv4.tcp_tw_reuse = 1(客户端有效),配合net.ipv4.tcp_timestamps = 1 - 缩短 TIME_WAIT 超时 :不推荐直接改 tcp_fin_timeout,更稳妥的是用
net.ipv4.tcp_fin_timeout = 30并确保应用层正确关闭连接 - 扩大连接队列 :调高
net.core.somaxconn和应用 listen()的 backlog(如 Nginx 中listen …… backlog=4096) - 启用快速打开(TFO):
net.ipv4.tcp_fastopen = 3,减少首次握手 RTT,在支持客户端下显著提升短连接性能
CPU 与调度器:保障响应性与吞吐平衡
对延迟敏感型服务(如实时交易、音视频)或 CPU 密集型批处理任务,需差异化配置:
- 调整进程调度优先级 :用
chrt -r 80运行实时线程,或ionice -c 1提升 I / O 优先级;慎用 SCHED_FIFO,避免饿死其他进程 - 绑定关键进程到特定 CPU:用
taskset -c 0,1 ./app或 cpuset cgroup 隔离核心,减少上下文切换与缓存抖动 - 优化调度延迟:若系统大量小任务,可适当调小
kernel.sched_latency_ns(如 6ms→4ms),增加调度频率;反之大任务为主则可略增大 - 禁用非必要中断聚合 :对低延迟要求场景,关闭
/proc/sys/net/core/busy_poll或调整net.core.busy_read,让内核更及时响应网络事件