我遇到了一个问题 kswapd0
,进程 (pid 52) 有时会开始使用 25% 的 CPU(一个完整核心)。我通常使用以下命令停止它sudo sh -c "echo 1 > /proc/sys/vm/drop_caches"
(请参阅 IBM 关于此问题的页面,这里)。
我想设置一个看门狗,每当 kswapd0 持续使用 22%+ CPU 超过三秒时,它就会执行该命令。因此,我想以有效的方式定期获取 kswapd0 cpu 使用情况。
以下是我当前用于获取即时 CPU 使用率的命令:
我从上面得到的信息:
top -bn1 -p $(pgrep kswapd0)
我将输出通过管道传输到 sed 以从最后一行提取 %CPU 值:
... | tail -n1 | sed -r 's/^ *([^ ]+ +){8}([^ ]+)( +[^ ]+){3}/\2/'
我知道在交互模式下,显示的cpu使用率top
是两次刷新之间的平均cpu使用率,但我不知道单次调用top时它是什么。
请注意,这ps -p $PID -o %CPU
不适合我的问题,因为它打印的平均 cpu 使用率是在整个进程生命周期(而不是最后几秒)完成的。
如何使用更简单的技术获取 cpu 使用率? (比较合适的一个)