Monitorización de procesos en GNU/Linux

Hola compañeros de la shell, en esta entrada vamos a escribir sobre un tema ampliamente tratado como es la monitorización/revisión de procesos desde CLI en GNU/Linux.

El comando por excelencia para monitorizar procesos en GNU/Linux es: ps

Siempre es recomendable leer con detenimiento el manual de los comandos que vayamos a utilizar, pero en el caso de ps este hábito se convierte en indispensable:

man ps

A modo de resumen: si utilizamos ps con argumentos precedidos por el caracter «-» la salida de ps será de tipo Unix-like. Si usamos ps sin «-» la salida de ps será de tipo BSD-like. Por lo tanto, a la hora de interpretar la salida de ps es importante tener en cuenta que:

ps -aux

Es distinto de:

ps aux

Por otro lado, una lectura rápida sobre el filesystem /proc es fundamental ya que el contenido del directorio /proc/PID del proceso en ejecución a monitorizar nos aportará una información muy valiosa.

Aplicaciones prácticas sobre monitorización de procesos en GNU/Linux:

1. Comprobar si un proceso está corriendo (hay muchas formas, a continuación algunas):

ps PID
top -p PID
ps -efww | grep PID

2. Ver el tiempo que lleva en máquina un proceso:

ps -p PID -o etime=

3. Ver el consumo de memoria y cpu de un proceso:

ps -p PID -o vsz,rss,pcpu

## Ejmplo de output

ps -p 14924 -o vsz,rss,pcpu
 VSZ RSS %CPU
1955076 525816 0.1

4. Argumentos que se pasaron al proceso (contenido del fichero /proc/PID/cmdline):

cat /proc/PID/cmdline | tr '\0' '\n'

5. Librerías usadas por el proceso (contenido del fichero /proc/PID/maps):

cat /proc/PID/maps | awk '{print $6}' | egrep -v "\[stack\]|\[heap\]" | sed '/^$/d' | uniq

6. Directorio actual del proceso (comando válido para Solaris):

pwdx PID

7. Revisión de status/consumos de un proceso en modo «batch» mediante top:

top -b -p PID_PROCESO -n 1

8. Procesos ordenados por score de OOM Killer (fuente original):

printf 'PID\tOOM Score\tOOM Adj\tCommand\n'
while read -r pid comm; do [ -f /proc/$pid/oom_score ] && [ $(cat /proc/$pid/oom_score) != 0 ] && printf '%d\t%d\t\t%d\t%s\n' "$pid" "$(cat /proc/$pid/oom_score)" "$(cat /proc/$pid/oom_score_adj)" "$comm"; done < <(ps -e -o pid= -o comm=) | sort -k 2nr

9. Detección de posibles procesos residuales (más de 24 horas desde su ejecución):

ps -eo etimes,pid,euser,lstart,etime,args --sort -etimes | awk '{if ($1 > 24*3600) print $0 }'

Espero que os sirva.

Nos vemos al otro lado de la pantalla negra.

Esta entrada ha sido publicada en Monitorización GNU/Linux - Solaris y etiquetada como , , , , , , . Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *