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,让内核更及时响应网络事件











