¿Cómo guardar la información del CPU, RAM y el nombre del proceso en un archivo de texto en ubuntu?

Ando cazando un proceso que anda tronando unos servers pero no se cual es, así que me encontré con esta “solucion” para logear el CPU, memoria y el proceso cada 5 segundos en un archivo ps.log (https://askubuntu.com/questions/22021/how-to-log-cpu-load)

//De mi cosecha lo convertí en un script y lo deje corriendo como proceso de la siguiente manera

//Con cualquier editor de terminal creamos un archivo

vi log_cpu_process.sh

//Copiamos el codigo para crear el log cada 5 segs

while true; do (echo "%CPU %MEM ARGS $(date)" && ps -e -o pcpu,pmem,args --sort=pcpu | cut -d" " -f1-5 | tail) >> ps.log; sleep 5; done

//Damos permisos de ejecucion

chmod +x log_cpu_process.sh

//y dejamos corriendo el script como un proceso en el background

nohup setsid ./log_cpu_process.sh &

Ya despues la idea es cuando detecte un pico en el CPU o que vuelva a tronar el server ya puedo usar algo como esto:

ps.log | grep <la hora> o el <cpu%>

Resultado

Funcionó bien, detecte un pico en el uso del CPU y me meti a ver que era, solo que eran procesamiento normal de apache nada fuera de lo común. Al parecer lo que causaba el problema era que estaba corriendo un server de mysql que no se usaba//con este comando pueden ver dentro del archivo donde -n es el numero de lineas donde buscar y en el grep el –a es el numero de lineas a mostrar despues de que encuentra el criterio de busqueda entre las comillas

tail -n 5000000 ps.log | grep '20 18:40:' --after-context=12

Para detener el proceso

Muy importante para evitar que dejemos el proceso corriendo toda al vida hay que matarlo pero si se les olvido guardar el PID en algun lado pueden encontrarlo de la siguiente manera

ps -ax | grep log_cpu_process

y ya con el PID basta con un $ kill -9 <PID> y listo.

Comments

comments