Linux sysctl.d 持久化配置教程:为什么不要只执行 sysctl -w

July 7, 2026
解释 Linux sysctl、sysctl.d、systemd-sysctl 的关系,以及如何把 BBR、内核参数和网络参数做成可回滚的持久化配置。

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

排查配置没有生效

  1. 文件名是否以 `.conf` 结尾。
  2. 文件内容是否是 `key=value` 格式。
  3. 是否执行了 `sudo sysctl --system`。
  4. 是否被后续更高优先级配置覆盖。
  5. 是否在容器里,没有权限修改宿主机内核参数。

继续阅读