# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Añadir más columnas a la salida del comando TOP


El comando top por defecto nos muestra las columnas PID, USER, PR, NI, VIRT, RES, SHR, S, %CPU, %MEM, TIME+, COMMAND. Esta información se puede modificar y añadir nuevas columnas con información adicional. Las columnas disponibles son las siguientes:

* A: PID        = Process Id
  b: PPID       = Parent Process Pid
  c: RUSER      = Real user name
  d: UID        = User Id
  e: USER       = User Name
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty
  h: PR         = Priority
  i: NI         = Nice value
  j: P          = Last used cpu (SMP)
  k: %CPU       = CPU usage
  l: TIME       = CPU Time
  m: TIME+      = CPU Time, hundredths
  n: %MEM       = Memory usage (RES)
  o: VIRT       = Virtual Image (kb)
  p: SWAP       = Swapped size (kb)
  q: RES        = Resident size (kb)
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  t: SHR        = Shared Mem size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  w: S          = Process Status
  x: COMMAND    = Command name/line
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags

Para añadir una nueva columna, lo primero que debemos hacer es presionar la tecla “f” mientras se está ejecutando top. Una vez dentro aparecerá el listado anterior y únicamente hay que presionar la tecla de la columna que nos interese + enter. Si presionaramos la “p” por ejemplo, podríamos ver la memoria SWAP utilizada por cada proceso:

top - 19:15:29 up 283 days, 11:55,  7 users,  load average: 1.03, 1.18, 1.16
Tasks: 143 total,   1 running, 142 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.4%us,  1.1%sy,  0.0%ni, 87.7%id,  8.3%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:   1034708k total,  1012432k used,    22276k free,    51620k buffers
Swap:  2031608k total,       68k used,  2031540k free,   760100k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
 6485 mysql     15   0  147m  31m 5004 S    2  3.1   4793:22 116m mysqld
  606 apache    15   0 58612  39m 2360 S    0  3.9   0:00.01  17m httpd
 2375 apache    15   0 59332  41m 3740 S    0  4.1   0:00.14  16m httpd
32430 apache    15   0 59336  41m 3884 S    0  4.1   0:00.14  16m httpd
24473 apache    15   0 59332  41m 3884 S    0  4.1   0:00.21  16m httpd

La descripción sobre el significado de cada columna la tenéis en la página man de top. Una vez configurado a nuestro gusto podemos guardar la configuración para siempre presionando SHIFT + w. Se guardará para nuestro usuario dentro del fichero personal de preferencias de top:

Wrote configuration to '/home/usuario/.toprc' 

vzstat: el top de virtuozzo


vzstat es una utilidad integrada en los sistemas de virtualización Virtuozzo que muestra estadísticas y utilización de recursos a tiempo real, al más puro estilo del comando top.

Entre otras cosas, con vzstat podemos ver el estado general y carga del sistema y el listado de todos los containers con la utilización de recursos utilizada por cada uno. A partir de esta base, podemos personalizar la salida del programa, ordenando por contenedores con un uso mayor de recursos, visualizar el I/O a tiempo real y estadísticas totales de escritura/lectura, etc.

Por defecto, los datos se actualizan cada segundo, podemos modificar este tiempo con el parámetro “-d”. Lo primero que vemos al acceder a vzstat es el uptime del sistema y las medias de carga al igual que en top. A continuación podemos ver el número de contenedores activos, el número de procesos totales en el nodo hardware y el estado de los procesos (running, stopped, zombie, etc). Posteriormente, se muestra un resumen de la utilización de CPU y memoria (similar también a top). Para la memoria podréis comprobar que se muestra mucha información, fragmentación de las zonas de memoria, estado, latencia, caché, swap, etc.

La siguiente sección nos muestra estadísticas a tiempo real de la utilización de las interfaces de red, total de tráfico entrante y saliente en MB/s, paquetes y estadísticas de totales.

En lo referente a disco también podemos ver estadísticas de lectura y escritura por contenedor en MB/s y totales por nodo físico. Os recomiendo no obstante acceder a la página man de la utilidad porque hay muchísima información:

man vzstat

Os dejo algunos ejemplos de utilización:

Información estandar e información de CPU, procesos, sockets, %vm y %km por contenedor:

# vzstat

Información estandar e información de IO extendida (id,st,ior,iow,iort,iowt,ip) por contenedor:

# vzstat -i

Información estandar e información de red extendida (id,st,rx,tx,rxt,txt,rxpt,txpt,ip) por contenedor:

# vzstat -n

Con el parámetro “-o” podemos personalizar nosotros los parámetros a mostrar, ejemplo:

# vzstat -o id,st,vm,km,proc,cpu,sock,fcnt,mlat,ip,host,ior,iow,iort

A partir de aquí podéis seguir investigando y tomar contacto con la utilidad por vuestra cuenta.

TOP: mostrar información de múltiples CPU


Si tenéis una máquina con más de una CPU, y el comando TOP en lugar de mostrar la información detallada de cada una de ellas la muestra conjunta, debéis hacer lo siguiente:

Ejemplo de comando TOP con las CPU(s) agrupadas:

top - 11:02:08 up 26 min,  2 users,  load average: 0.01, 0.02, 0.03
Tasks: 102 total,   1 running, 141 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16433556k total,   414260k used, 16019296k free,    25672k buffers
Swap:  2096472k total,        0k used,  2096472k free,   177120k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+a COMMAND
10460 root      15   0 12740 1136  828 R  0.3  0.0   0:00.16 top
    1 root      15   0 10348  704  592 S  0.0  0.0   0:01.26 init [3]

Una vez dentro de la ejecución de top, presionad la tecla 1 para que se desplieguen todas las CPU. Si os agrada el resultado, presionad W para guardar el cambio y que por defecto aparezcan así:

top - 11:04:04 up 28 min,  2 users,  load average: 0.02, 0.02, 0.03
Tasks: 102 total,   1 running, 141 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.2%us,  0.1%sy,  0.1%ni, 98.9%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu1  :  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.2%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.1%us,  0.1%sy,  0.0%ni, 99.6%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.3%us,  0.0%sy,  0.0%ni, 99.7%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
Mem:  16433556k total,   413868k used, 16019688k free,    25896k buffers
Swap:  2096472k total,        0k used,  2096472k free,   177288k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      15   0 10348  704  592 S  0.0  0.0   0:01.26 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.01
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00

El comando ps: Listar y manejar procesos


Una entrada para los que se inician en el mundo Unix/Linux. El comando ps muestra por pantalla un listado de los procesos que se están ejecutando en el sistema.

Si no añadimos ningún parámetro, ps mostrará los procesos del usuario con el que estamos logueados. Por otra parte, los parámetros más básicos a conocer son los siguientes:

-aux Lista los procesos de todos los usuarios con información añadida (destacamos más abajo).

-a Lista los procesos de todos los usuarios.

-u Lista información del proceso como por ejemplo el usuario que lo está corriendo, la utilización de Cpu y memoria, etc.

-x Lista procesos de todas las terminales y usuarios

-l Muestra información que incluye el UID y el valor “nice“.

–forest – Muestra el listado procesos en un formato tipo árbol que permite ver como los procesos interactuan entre si, podría ser algo similar al comando pstree.
Ejemplo de uso del comando ps:

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3   2844  1692 ?        Ss   18:13   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S<   18:13   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S<   18:13   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S<   18:13   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   18:13   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S<   18:13   0:00 [migration/1]
root         7  0.0  0.0      0     0 ?        S<   18:13   0:00 [ksoftirqd/1]
root         8  0.0  0.0      0     0 ?        S<   18:13   0:00 [watchdog/1]
root         9  0.0  0.0      0     0 ?        S<   18:13   0:00 [events/0]
root        10  0.0  0.0      0     0 ?        S<   18:13   0:00 [events/1]
root        11  0.0  0.0      0     0 ?        S<   18:13   0:00 [khelper]
root        47  0.0  0.0      0     0 ?        S<   18:13   0:00 [kblockd/0]
root        48  0.0  0.0      0     0 ?        S<   18:13   0:00 [kblockd/1]
root        51  0.0  0.0      0     0 ?        S<   18:13   0:00 [kacpid]
root        52  0.0  0.0      0     0 ?        S<   18:13   0:00 [kacpi_notify]
root       128  0.0  0.0      0     0 ?        S<   18:13   0:00 [kseriod]
root       168  0.0  0.0      0     0 ?        S    18:13   0:00 [pdflush]
root       169  0.0  0.0      0     0 ?        S    18:13   0:00 [pdflush]
root       170  0.0  0.0      0     0 ?        S<   18:13   0:00 [kswapd0]
...
...
...

Podéis revisar también la entrada en la que hablaba del comando pgrep o top, pues os puede ser de utilidad, en breve hablaremos de comandos relacionados como kill, killall , pkill, etc.

El comando TOP


Top Unix

El comando TOP muestra a tiempo real un listado de los procesos que se están ejecutando en el sistema, especificando además el % de Cpu y Memoria que están utilizando, sus IDs, usuarios que lo están ejecutando, etc. Todo esto y mucho más lo hace una de las herramientas imprescindibles para la administración de cualquier tipo de sistema Unix y derivado.

La salida por pantalla de Top, puede dividirse en dos partes, la “cabecera” muestra entre otras cosas, el Uptime del servidor, nº de usuarios conectados y load average. En la siguiente línea podemos ver el nº de procesos ejecutandose en el sistema, así como el uso de disco, memoria y cpus.

Posteriormente podemos observar un listado de procesos, que pueden ser ordenados por uso de cpu o memoria, lo que es una excelente ayuda para detectar procesos que consumen excesivos recursos en el servidor. Este listado, muestra varios detalles de cada uno de los procesos, como pueden ser el PID de proceso, usuario que lo ejecuta, %cpu y memoria que consume, comando que está ejecutando o tiempo de ejecución del proceso entre otros.

Como siempre digo, toda la información necesaria para sacar el máximo partido al proceso la tenemos en man:

man top

No obstante, paso a detallar algunas de las opciones que podemos pasarle al comando:

Opciones del comando TOP:

-c : Para visualizar la línea de comandos completa de cada proceso, activado mostrará las rutas completas, mientras que desactivandolo solo muestra el nombre del programa, ejemplo:

$ top -c:

 4969 root      20   0 55092  39m   9m S   14  7.8  26:08.38 /usr/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7

$ top

 4969 root      20   0 59996  39m   9m S   16  7.8  26:05.87 Xorg

-d : Intervalo de actualización y refresco, podemos asignarle un valor numérico (segundos) que determinará cada cuanto actualice la información.

-U : Monitorizar solamente los procesos de un determinado UID.

-p : Monitorizar solamente los ID de procesos especificados, ejemplo:

top -p12 -p133

-n : Especificaremos el nº de veces que actualizará hasta que finalice la ejecución de Top, ejemplo:

top -n4 # Refrescará la información cuatro veces y finalizará la ejecución de TOP.

Algún día hablaremos también de modificaciones del comando TOP, como por ejemplo HTOP.