我已经修改了net.core.rmem_max
with 的值sysctl
,现在我想将其设置回其默认值。
如果我重新启动,net.core.rmem_max
将恢复为默认值(因为它没有在中被覆盖/etc/sysctl.conf
),但是我可以知道该值而无需重新启动吗?
理想情况下sysctl net.core.rmem_max
,在修改值之前我应该已经运行过读取该值,但是我忘记了...
我已经修改了net.core.rmem_max
with 的值sysctl
,现在我想将其设置回其默认值。
如果我重新启动,net.core.rmem_max
将恢复为默认值(因为它没有在中被覆盖/etc/sysctl.conf
),但是我可以知道该值而无需重新启动吗?
理想情况下sysctl net.core.rmem_max
,在修改值之前我应该已经运行过读取该值,但是我忘记了...
Answers:
通常这是不可能的:内核不保留原始值(至少在Linux下不保留原始值,其他unix变体可能也是如此)。设置的值存储在变量中。更改设置时,包含该变量的内存将不可逆地更新。
对于大多数设置,变量的初始值是一个常数,该常数在编译时确定并存储在内核二进制文件中。因此,原则上您可以检查内核二进制文件以找到默认值。您将必须找到与您感兴趣的设置相对应的符号,并在内核二进制文件中跟随该符号的地址。在虚拟机中引导内核会减少工作量。
对于大多数设置,您可以查看内核源代码kernel/sysctl.c
和其他文件。您会看到类似的定义
{
.procname = "rmem_max",
.data = &sysctl_rmem_max,
…
},
(以表示net/core/sysctl_net_core.c
),您可以从中跟踪sysctl_rmem_max
变量的初始化。尽管此常量是通过常量初始化的,但需要花费大量时间阅读C代码才能进行扩展。