在 Linux 中,当您在 sysctl 中更改/设置值时,sysctl 似乎会在每次启动时应用这些设置,但这些设置将保持默认,直到 sysctl 启动并应用用户设置的值。
如何改变默认值,使它们始终是用户设置的值,从而消除它们为默认值的时间窗口?
或者我一开始就错了(sysctl 实际上永久改变了该值)?
答案1
更新答案
许多内核参数的“默认”值sysctl
被编译到内核本身中。
例子: kernel.numa_balancing_scan_delay_ms
1000
默认设置为./kernel/sched/fair.c
,加载于./kernel/sysctl.c
。
您可以在以下位置更改这些运行时sysctl
3. systemd 在启动时执行此操作systemd-sysctl.service
在启动过程的早期。
出于某种原因,听起来你正在很早地初始化一些东西,以至于内核参数不能稍后设置,必须在启动时设置。如果早期启动服务仍然太晚,而你又不能容忍sysctl
那么晚设置参数,也许你可以设置启动参数2在你的引导加载程序的内核行中。
如果你做不到这一点,你可能需要编译自定义内核1使用您想要的默认值。
有三种方法可以将选项传递给内核并从而控制其行为:
原始答案
/etc/sysctl.conf
在 中或 中的*.conf
文件中设置值/etc/sysctl.d/
。
一旦设置完毕,您可以通过运行重新加载配置sudo sysctl --system
。
其他资源
- 如何在 Linux 上重新加载 sysctl.conf 变量在 nixCraft 上
- 如何从 sysctl.d 目录重新加载 sysctl?关于超级用户
man 8 sysctl