Obtém periodicamente o uso da CPU para um único processo

1

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)

    
por loxaxs 30.01.2016 / 21:35

0 respostas