Eu tenho um problema com o processo kswapd0
(pid 52), que de tempos em tempos começava a usar 25% da CPU (um núcleo completo). Eu geralmente paro com o comando sudo sh -c "echo 1 > /proc/sys/vm/drop_caches"
(veja a página da IBM sobre o problema, aqui ).
Eu gostaria de definir um watchdog, que executaria esse comando sempre que o kswapd0 continuasse usando 22% + CPU por mais de três segundos. Portanto, eu gostaria de obter o uso da CPU do kswapd0 periodicamente, de maneira eficiente.
Aqui estão os comandos que eu uso atualmente para obter o uso instantâneo da CPU:
Eu recebo as informações do topo:
top -bn1 -p $(pgrep kswapd0)
e canalizo a saída para sed para extrair o valor% da CPU da última linha:
... | tail -n1 | sed -r 's/^ *([^ ]+ +){8}([^ ]+)( +[^ ]+){3}//'
Eu sei que no modo interativo, os usos de CPU exibidos por top
são os usos médios de CPU entre duas atualizações, mas eu não sei o que é quando top é invocado uma única vez.
Observe que ps -p $PID -o %CPU
não se encaixa no meu problema, já que o uso médio de cpu impresso é feito em toda a vida útil do processo (em vez dos últimos segundos).
Como faço para obter o uso da CPU com uma técnica mais leve? (mais apropriado)