Usando “watch” para detectar diferença de valor e gravar em um arquivo

0

Estou tentando capturar a causa de um% de pico de CPU intermitente em um servidor com o comando: assista -n .5 "ps aux | ordene -rk 3,3 | cabeça -n 2" onde exibe o processo com o maior% de CPU a cada 0,5 segundos.

No entanto, como é difícil capturar (o evento é aleatório e não tenho ideia de quanto tempo dura), quero fazer o seguinte: 1. Reduza o intervalo (para aumentar a chance de capturar o evento) e grave a saída em um arquivo 2. Como o processo top é geralmente constante, eu gostaria de escrever somente quando há uma diferença de valor entre duas saídas sucessivas (como quando ocorre o pico da CPU) para evitar a criação de um arquivo tão grande.

TIA!

    
por user305131 02.02.2016 / 06:17

1 resposta

1

Esqueça o relógio, isso deve acontecer, 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 com o tempo, e o que você está procurando é particularmente o uso da CPU, o efeito de uniq é muito limitado e ainda uma grande quantidade de dados é produzida. Você pode usar cut para suprimir as variáveis que não são importantes para você, para que a variação delas não aumente o número de pontos de dados produzidos.

    
por 02.02.2016 / 06:33

Tags