
Estoy tratando de detectar la causa de un pico intermitente de %CPU en un servidor con el comando: watch -n .5 "ps aux | sort -rk 3,3 | head -n 2" donde muestra el proceso con el % más alto CPU cada 0,5 segundos.
Sin embargo, dado que es difícil de detectar (el evento es aleatorio y no tengo idea de cuánto dura), quiero hacer lo siguiente: 1. Reducir el intervalo (para aumentar las posibilidades de detectar el evento) y escribir el resultado en un archivo 2. Dado que el proceso superior suele ser constante de todos modos, me gustaría escribir solo cuando hay una diferencia de valor entre dos salidas sucesivas (como cuando ocurre el pico de CPU) para evitar crear un archivo tan grande.
TÍA!
Respuesta1
Olvídate del reloj, esto debería funcionar, al menos en teoría:
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
El único problema es que dado que el uso de CPU de cada proceso varía con el tiempo, y lo que se busca es particularmente el uso de CPU, el efecto uniq
es muy limitado y aún así se produce una gran cantidad de datos. Puede utilizar cut
para suprimir las variables que no son importantes para usted, de modo que su variación no aumente la cantidad de puntos de datos producidos.