【Linux 基础知识系列:第二百二十篇】Linux 系统优化实战:内核参数调优
一、简介:为什么要手动调内核参数?
-
内核参数 = 操作系统“隐藏技能树”,默认取值偏向“通用”,高并发、大内存、低延迟场景往往成为瓶颈。
-
实际痛点:
-
电商平台大促,Nginx 报错
TIME_WAIT堆积 → 连接超时。 -
日志收集服务器 10 万连接接入 →
nf_conntrack: table full直接丢包。 -
8 GB 内存虚拟机,默认
vm.swappiness=60→ 没用多少就疯狂 swap,性能腰斩。
-
-
调优收益:同等硬件,QPS 提升 2-5 倍,延迟下降 30%+,且无需改代码。
掌握 /etc/sysctl.conf 玩法,是运维、开发、测试都值得投资的“低成本高回报”技能。
二、核心概念:5 个关键词读懂 sysctl
| 关键词 | 一句话说明 | 示例 |
|---|---|---|
sysctl |
查询/修改运行中内核参数的工具 | sysctl net.core.somaxconn |
/proc/sys/ |
参数在内存中的真实位置 | net.ipv4.tcp_tw_reuse → /proc/sys/net/ipv4/tcp_tw_reuse |
/etc/sysctl.conf |
开机持久化配置文件,一行一个参数 | net.core.somaxconn = 65535 |
module parameter |
内核模块加载时可调参,不在本文范围 | modprobe nf_conntrack hashsize=262144 |
immediate effect |
修改后立刻生效,重启失效,需写文件才持久 | sysctl -w vm.swappiness=10 |
三、环境准备:3 分钟搭好实验机
-
系统:Ubuntu 20.04+/CentOS 8+(内核 ≥4.18 即可)
-
权限:普通用户可查看,修改需 root
-
工具:自带
sysctl+ 文本编辑器(nano/vim) -
备份:改前备份默认配置
sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%F)
四、命令与示例:网络·内存·文件系统 3 大场景
下列参数均经 8-128 GB 内存、1k-500k 并发线上验证,可直接复制;先
sysctl -w临时验证,再写/etc/sysctl.conf持久化。
4.1 网络层:高并发 Web/网关必备
| 参数 | 默认 | 建议 | 作用 |
|---|---|---|---|
net.core.somaxconn |
128 | 65535 | 全连接队列长度 |
net.ipv4.tcp_tw_reuse |
0 | 1 | 安全重用 TIME_WAIT |
net.ipv4.ip_local_port_range |
32768-60999 | 1024-65535 | 增加可用端口 |
net.netfilter.nf_conntrack_max |
65536 | 262144 | 防火墙跟踪表大小 |
临时验证:
sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"
持久化 → 追加到 /etc/sysctl.conf:
echo '# 高并发网络优化' | sudo tee -a /etc/sysctl.conf
echo 'net.core.somaxconn = 65535' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_tw_reuse = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.ip_local_port_range = 1024 65535' | sudo tee -a /etc/sysctl.conf
一键重载:
sudo sysctl -p
4.2 内存层:大内存&Swap 控制
| 参数 | 默认 | 建议 | 作用 |
|---|---|---|---|
vm.swappiness |
60 | 10 | 降低 swap 积极程度 |
vm.dirty_ratio |
20 | 10 | 脏页上限百分比 |
vm.dirty_background_ratio |
10 | 5 | 后台回写阈值 |
vm.overcommit_memory |
0 | 1 | 允许轻微 overcommit |
示例:8 GB 内存虚拟机,减少 swap 抖动
sudo sysctl -w vm.swappiness=10
sudo sysctl -w vm.dirty_ratio=10
sudo sysctl -w vm.dirty_background_ratio=5
持久化:
echo '# 内存优化' | sudo tee -a /etc/sysctl.conf
echo 'vm.swappiness = 10' | sudo tee -a /etc/sysctl.conf
echo 'vm.dirty_ratio = 10' | sudo tee -a /etc/sysctl.conf
echo 'vm.dirty_background_ratio = 5' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
4.3 文件系统:提升 IO 吞吐
| 参数 | 默认 | 建议 | 作用 |
|---|---|---|---|
fs.file-max |
922337 | 2097152 | 系统级最大句柄 |
fs.nr_open |
1048576 | 2097152 | 单进程最大句柄 |
vm.vfs_cache_pressure |
100 | 50 | 缓存回收倾向 |
示例:日志收集服务器句柄耗尽
sudo sysctl -w fs.file-max=2097152
sudo sysctl -w fs.nr_open=2097152
持久化同理 tee -a /etc/sysctl.conf。
4.4 快速批量:一键优化脚本(可复制)
#!/bin/bash
# save as tune.sh
cat <<EOF | sudo tee /etc/sysctl.conf >/dev/null
# 网络
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
net.netfilter.nf_conntrack_max = 262144
# 内存
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 文件系统
fs.file-max = 2097152
fs.nr_open = 2097152
vm.vfs_cache_pressure = 50
EOF
sudo sysctl -p
echo "优化完成,已持久化"
运行:
chmod +x tune.sh
sudo ./tune.sh
五、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
sysctl: permission denied |
普通用户执行 | 加 sudo |
| 修改后重启失效 | 未写 /etc/sysctl.conf |
按文中步骤持久化 |
nf_conntrack 参数不存在 |
模块未加载 | 先 sudo modprobe nf_conntrack 再改 |
| 端口范围改完仍不够用 | 仍报 Address already in use |
同时打开 tcp_tw_reuse & 降低 tcp_fin_timeout=30 |
| 系统提示“Read-only file system” | 在容器内 | 容器层限制,需在宿主机或 --privileged 启动 |
六、实践建议与最佳实践
-
改前压测,改后对照
使用wrk、iperf3、fio做基准,避免“拍脑袋”调优。 -
逐条应用,回滚方便
每改 1-3 个参数就sysctl -p,观察 5 分钟,出异常立即sudo cp /etc/sysctl.conf.bak.xxx /etc/sysctl.conf && sysctl -p。 -
云主机特殊注意
-
安全组 ≠ 内核参数,两者都要开。
-
部分平台(阿里云 T5)CPU 积分耗尽,调优无效。
-
-
容器场景
-
Docker 默认
--sysctl支持,例:docker run --sysctl net.core.somaxconn=65535 ...
-
-
文档化 & Git
把sysctl.conf纳入 Ansible、Git,合并 MR 前走 Review,防止“手滑”复制网上段子参数。 -
升级内核后再审查
新版默认值可能已优化(如somaxconn在 5.x 升为 4096),避免“过度调优”。
七、总结:一张思维导图带走全部要点
内核参数调优
├─ 网络:somaxconn, tw_reuse, port_range, conntrack_max
├─ 内存:swappiness, dirty_ratio, background_ratio
├─ 文件:file-max, nr_open, vfs_cache_pressure
├─ 工具:sysctl -w / -p / -a
└─ 持久:/etc/sysctl.conf + 重启验证
同等硬件,调优后再压测,QPS 翻倍不是梦。
立刻备份默认配置,运行本文“一键脚本”,再打开 htop 观察 swap、SYN 队列、文件句柄——你会肉眼看到系统更“丝滑”。
把这份 sysctl.conf 模板推送到你的 Git 仓库,下次新机器上线,30 秒完成标准化优化,让时间真正花在写代码,而不是等待“卡顿”结束!
更多推荐




所有评论(0)