
Estou tentando capturar a causa de um pico intermitente de% de CPU em um servidor com o comando: watch -n .5 "ps aux | sort -rk 3,3 | head -n 2" onde exibe o processo com a maior% CPU a cada 0,5 segundos.
Porém, como é difícil de capturar (o evento é aleatório e não tenho ideia de quanto tempo dura), quero fazer o seguinte: 1. Reduzir o intervalo (para aumentar a chance de capturar o evento) e escrever a saída em um arquivo 2. Como o processo principal geralmente é constante de qualquer maneira, eu gostaria de escrever apenas quando houver uma diferença de valor entre duas saídas sucessivas (como quando ocorre um pico de CPU) para evitar a criação de um arquivo tão grande.
TIA!
Responder1
Esqueça o relógio, isso deveria servir, pelo menos teoricamente:
while true; do
# I cut the header first with tail
cat file <(ps aux | tail -n +2 | sort -rk 3,3 | head -n 2) | sort | uniq | sponge file
# A certain amount of delay
sleep 0.1
done
O único problema é que como o uso da CPU de cada processo varia ao longo do tempo, e o que você procura é principalmente o uso da CPU, o efeito uniq
é muito limitado e ainda é produzida uma grande quantidade de dados. Você pode usar cut
para suprimir as variáveis que não são importantes para você, para que sua variação não aumente o número de pontos de dados produzidos.