Linux sysctl.d 持久化配置教程:为什么不要只执行 sysctl -w
更新日期:2026-07-07
很多 Linux 调优教程会让你执行 `sysctl -w xxx=yyy`。这条命令只会修改当前运行中的内核参数,重启后会丢失。长期配置应该写入 `/etc/sysctl.d/*.conf`。
sysctl 是什么
`sysctl` 用来查看和修改 Linux 内核运行时参数。这些参数对应 `/proc/sys/` 下的虚拟文件,例如:
sysctl net.ipv4.tcp_congestion_control
cat /proc/sys/net/ipv4/tcp_congestion_control
临时修改
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
这种方式适合测试,但重启后可能恢复默认值。
持久化修改
推荐为每个主题创建独立配置文件,例如 BBR:
sudo tee /etc/sysctl.d/99-bbr.conf >/dev/null <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sudo sysctl --system
`sysctl --system` 会读取多个 sysctl 配置目录,并按规则应用配置。使用独立文件的好处是容易审计、回滚和迁移。
不建议把所有参数塞进 /etc/sysctl.conf
`/etc/sysctl.conf` 仍然常见,但大型服务器上更推荐按主题拆成多个文件:
- `99-bbr.conf`
- `90-security.conf`
- `90-database.conf`
- `90-kubernetes.conf`
这样可以清楚知道每个配置是谁加的、为了什么加、如何回滚。
回滚某个配置
sudo rm -f /etc/sysctl.d/99-bbr.conf
sudo sysctl --system
如果想立即改回 Cubic:
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
排查配置没有生效
- 文件名是否以 `.conf` 结尾。
- 文件内容是否是 `key=value` 格式。
- 是否执行了 `sudo sysctl --system`。
- 是否被后续更高优先级配置覆盖。
- 是否在容器里,没有权限修改宿主机内核参数。