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密集型批处理任务,需差异化配置: