更新答案

更新答案

在 Linux 中,当您在 sysctl 中更改/设置值时,sysctl 似乎会在每次启动时应用这些设置,但这些设置将保持默认,直到 sysctl 启动并应用用户设置的值。

如何改变默认值,使它们始终是用户设置的值,从而消除它们为默认值的时间窗口?

或者我一开始就错了(sysctl 实际上永久改变了该值)?

答案1

更新答案

许多内核参数的“默认”值sysctl被编译到内核本身中。

例子: kernel.numa_balancing_scan_delay_ms1000默认设置为./kernel/sched/fair.c,加载于./kernel/sysctl.c

您可以在以下位置更改这些运行时sysctl3. systemd 在启动时执行此操作systemd-sysctl.service在启动过程的早期。

出于某种原因,听起来你正在很早地初始化一些东西,以至于内核参数不能稍后设置,必须在启动时设置。如果早期启动服务仍然太晚,而你又不能容忍sysctl那么晚设置参数,也许你可以设置启动参数2在你的引导加载程序的内核行中。

如果你做不到这一点,你可能需要编译自定义内核1使用您想要的默认值。

来自 Arch Linux wiki

有三种方法可以将选项传递给内核并从而控制其行为:

  1. 在构建内核时。请参阅内核编译了解详情。
  2. 启动内核时(通常从引导加载程序调用时)。
  3. /proc在运行时(通过和中的文件/sys)。请参见系统控制了解详情。

原始答案

/etc/sysctl.conf在 中或 中的*.conf文件中设置值/etc/sysctl.d/

一旦设置完毕,您可以通过运行重新加载配置sudo sysctl --system


其他资源

相关内容