我在系统日志中看到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:
是的,您可以编写一个脚本来每隔几分钟记录此变量,但如果它发生更改时会显示在日志中,为什么要这样做呢?
直接从 /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