查看当前内核参数?

查看当前内核参数?

我在系统日志中看到kernel.perf_event_max_sample_rate发生了变化。

我想知道是否可以编写一个快速脚本来每隔几分钟记录此变量。目前是:

sysctl -a | grep kernel.perf_event_max_sample_rate

在手册页 sysctl 中说

sysctl- 在运行时配置内核参数

这是否意味着我的脚本将获取内核启动时设置的参数?它会接受变化吗?

答案1

所以学习 Unix 的一件大事就是阅读该死的手册页:

我不仅仅是一个脾气暴躁的老人,里面确实有有价值的信息。在这种情况下:

描述 sysctl 用于在运行时修改内核参数。可用的参数列在 /proc/sys/ 下。 Linux 中的 sysctl 支持需要 Procfs。您可以使用 sysctl 来读取和写入 sysctl 数据。

所以我们可以:

$sudo sysctl -a | grep kernel.perf_event_max_sample_rate
kernel.perf_event_max_sample_rate = 50000
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.enp3s0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.wlp1s0.stable_secret"

通过阅读联机帮助页,我们了解到 -a 是“显示当前可用的所有值”,但我们也可以看到:

概要

  sysctl [options] [variable[=value]] [...]
  sysctl -p [file or regexp] [...]

这意味着我们可以将上面的命令缩短为:

$ sudo sysctl kernel.perf_event_max_sample_rate
kernel.perf_event_max_sample_rate = 50000    

或者我们可以:

$ more /proc/sys/kernel/perf_event_max_sample_rate 
50000

所以,TL;DR:

  1. 是的,您可以编写一个脚本来每隔几分钟记录此变量,但如果它发生更改时会显示在日志中,为什么要这样做呢?

  2. 直接从 /proc/sys/kernel/perf_event_max_sample_rate 读取值可能比使用 sysctl 更有效,并且从 sysctl 请求特定值比使用 grep 更有效。

答案2

如果您阅读 systctl 的联机帮助页,您还会发现 systctl 只是一个镜像/进程/系统。因此,您不需要任何命令来更改 systctl 值。赶紧跑

echo $value > /proc/sys/$sysctl_setting

请注意将 *.* 替换为/在这种情况下。

在 while 循环中循环它,如下所示:

sleep_time=10m
while true ; do 
         echo $value > /proc/sys/$sysctl_setting
         sleep $sleep_time
done

相关内容