Inicio > Linux > Monitoreo en linux: top

Monitoreo en linux: top

Jueves, 16 de julio de 2009 jarrarte Dejar un comentario Ir a comentarios

Mi idea original era hacer un post con un resumen de los comandos de Linux que pueden ser utilizados para diagnosticar algún problema de CPU, memoria o I/O; generalmente este conjunto de comandos está formado por top, iostat, vmstat, netstat, telnet, tail de algún log, cat/grep de algún archivo, y algún otro. Cuando empecé a escribir el post empezó quedar enorme, así que voy a separarlo en pedazos, y hacer algo así como una serie de posts sobre este tema.

El comando top nos provee una vistá dinámica y en tiempo real con la cantidad y estado de los procesos corriendo actualmente, memoria, espacio de swap y los recursos utilizados por cada proceso.

La interfaz es actualizada cada cierto período de tiempo (por defecto, 3segundos). Despliega un resumen del estado del sistema y una lista de los procesos corriendo, de la siguiente manera:

top - 16:26:10 up  2:53,  1 user,  load average: 0.01, 0.01, 0.00
Tasks:  46 total,   2 running,  44 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.3%sy,  6.0%ni, 93.0%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    252692k total,   248656k used,     4036k free,    19440k buffers
Swap:   506036k total,       44k used,   505992k free,   188384k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3365 p2p       39  19 42560  21m 4716 S  6.3  8.9   3:32.54 mlnet
 4076 root      20   0  2324 1120  888 R  0.3  0.4   0:00.11 top
    1 root      20   0  1656  496  456 S  0.0  0.2   0:00.38 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 events/0
    5 root      15  -5     0    0    0 S  0.0  0.0   0:00.03 khelper
  163 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kblockd/0

Resumen del estado del sistema

En la primer línea tenemos la fecha y hora actual, la cantidad de usuarios utilizando el sistema y la carga del sistema del último minuto, de los últimos 5 minutos y de los últimos 15 minutos respectivamente. Cómo se calcula el load average es un tema en sí mismo, pero básicamente es el promedio de la cantidad de procesos corriendo o prontos para correr en cierto período de tiempo.

Lo que tenemos que saber que a mayor load average, mayor uso de procesador. Un load average de 0 indica que el procesador ha sido muy poco utilizado en ese período de tiempo, mientras que si es mayor, significa que hay más procesos corriendo y prontos para correr que lo que el(los) core(s) pueden procesar. Un load average igual a la cantidad de cores indica un uso óptimo del CPU.  Más info acá y acá.

En la segunda línea (Tasks) tenemos la cantidad de procesos y una agregación según el estado de cada uno. Los diferentes estados que muestra son los siguientes:

  • Running: procesos corriendo actualmente, o listos para correr en cuanto se les asigne tiempo de CPU.
  • Sleeping: el proceso está dormido esperando que ocurra un evento para volver al estado “running”.
  • Stopped: La ejecución del proceso está parada; no está corriendo, y no va a volver a correr. Los procesos generalmente entran en este estado cuando reciben señales que no están manejando, y la acción por defecto de las mismas es pasar el proceso a stopped. Esto incluye señales como SIGSTOP, SIGTSTP, SIGTTIN, y SIGTTOU. Una señal de tipo SIGCONT saca al proceso de este estado (ver el comando fg). Con Ctrl+Z mandamos el proceso corriendo en la terminal al background, pasando a estado stopped.
  • Zombie: El proceso tampoco está corriendo. Los procesos quedan en este estado cuando su el proceso que los inició murió, ya sea por un error de programación o porque fue matado (ver kill -9).

La tercera línea nos da los porcentajes de uso de procesador, discriminado por “tipo” de uso. Los diferentes tipos significan lo siguiente:

  • us: tiempo de procesos de usuario
  • sy: tiempo de procesos del sistema (kernel)
  • ni: tiempo de procesos del usuario que tienen un “nice” positivo
  • wa: tiempo en el cual los procesos están esperando por pedidos de I/O pendientes.
  • id: tiempo “idle”, en que no hay procesos requiriendo tiempo de procesador, y tampoco hay pedidos de I/O pendientes.
  • st: “steal time”, sólo aplica cuando nuestro Linux corre en una máquina virtual. Es el tiempo que algún proceso de nuestro sistema estaba esperando en la cola de ejecución, pero el hypervisor eligió no darnos tiempo de procesador, y asignarlo a otro procesador virtual.

Si presionamos la tecla ‘1’, top nos muestra las estadísticas de uso discriminado por cada core/procesador:

top - 18:57:22 up 12 days,  5:09,  1 user,  load average: 0.03, 0.03, 0.00
Tasks: 174 total,   1 running, 173 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

La línea siguiente (Mem) detalla las estadísticas de uso de memoria. En ella vemos la memoria total, la memoria utilizada, la memoria libre y la memoria utilizada por como buffers.

Mem:    252692k total,   248656k used,     4036k free,    19440k buffers

La última de las líneas del resumen (Swap) detalla el uso del espacio de swap. Indica cuánto es el espacio de swap total, cuánto está utilizado, cuánto libre y cuánto está siendo utilizado por páginas cacheadas

Swap:   506036k total,       44k used,   505992k free,   188384k cached

Lista de procesos

Luego del resumen del uso de los recursos del sistema top lista los procesos activos, ordenándolos según el uso de procesador.

Las columnas tienen el siguiente significado:

  • PID: Process ID
  • USER: usuario que inició el proceso
  • PR: prioridad del proceso
  • NI: nice value. Un valor negativo significa mayor prioridad (hasta -20), un valor positivo, menor prioridad (hasta 19)
  • VIRT: Cantidad de memoria virtual utilizada por el proceso (incluyendo datos, código, shared libraries y swap)
  • RES: Cantidad de memoria RAM física que el proceso está utilizando
  • SHR: Cantidad de memoria compartida. Refleja la memoria que potencialmente podría ser compartida con otros procesos.
  • S: Status del proceso. Los posibles estados son ‘D’ (uninterruptible sleep), ‘R’ (running),  ‘S’ (sleeping), ‘T’ (traced o stopped) o ‘Z’ (zombie).
  • %CPU: porcentaje de CPU utilizado desde la última actualización de la pantalla.
  • %MEM: porcentaje de memoria física utilizada por el proceso
  • TIME+: Tiempo total de CPU que el proceso ha utilizado desde que se inició.
  • COMMAND: comando utilizado para iniciar el proceso.

Se pueden agregar, quitar o cambiar el orden de estas columnas con las teclas f y o.

Interacción con top

Podemos utilizar las siguientes teclas para interactuar con top:

  • M – Ordenar por uso de memoria
  • P – Ordenar por uso de CPU
  • T – Ordenar por tiempo de CPU utilizado
  • F – seleccionar campo por el cual ordenar la lista de procesos
  • i  – mostrar u ocultar procesos idle y zombie
  • m, l, t, 1 – muestra u oculta las líneas del resumen (parte de arriba)
  • f, o – agregar/quitar columnas, cambiar el orden
  • s – cambia el tiempo de actualización de la pantalla (por defecto, 3 segundos)
  • z – Colores
  • k – Matar un proceso (luego pregunta el PID)
  • r – “renice” cambia el nice value de un proceso (luego pregunta el PID)
  • q – finalizar
  • h – ayuda

Hay algunas más, que se pueden ver en la ayuda del comando o en las man pages.

Referencias

http://www.kernelhardware.org/linux-top-command/

http://www.unix.com/unix-dummies-questions-answers/10157-top-shows-stopped-process.html

http://foros.hackerss.com/lofiversion/index.php/t3914.html

man top

Posts relacionados (generados automáticamente):

  1. Monitoreo en Linux: nmon

Categories: Linux Tags:
  1. El Omega
    Viernes, 24 de julio de 2009 a las 17:22 | #1

    Muy buen material! La información me parece muy util y completa. Podrías publicar algo así para ver los comandos para obtener información detallada de uso de recursos de red (conexiones, puertos abiertos, etc)?

    • Viernes, 24 de julio de 2009 a las 17:50 | #2

      Es la idea estimado Omega. En medida que el tiempo lo permita, iré agregando posts sobre las diferentes herramientas que utilizamos para monitorear nuestras aplicaciones que corren en servidores Linux (netstat, iostat, ps, vmstat, etc.). ¡Gracias por tu comentario!

  1. Sin trackbacks aún.