Este artículo tiene como propósito mostrar herramientas para obtener estadísticas de uso de memoria, CPU, paginado y procesos en un servidor GNU/Linux. La mayoría de ellas muestra gran cantidad de información y tienen muchas funcionalidades, por lo que sólo se muestran ejemplos básicos de cada una.

free

La herramienta free muestra la cantidad de memoria utilizada y libre en el sistema en un determinado momento, tanto para la memoria RAM como para el área de intercambio (swap). La opción -m se utiliza para que la unidad sea Mega Bytes y la opción -t se utiliza para agregar la fila "Total".

$ free -mt
             total       used       free     shared    buffers     cached
Mem:          3739       3451        288          0        356        906
-/+ buffers/cache:       2187       1552
Swap:         3906          0       3906
Total:        7646       3451       4194

La columna "free" indica que hay 288 MB de memoria RAM disponible.

vmstat

La herramienta vmstat muestra estadísticas de uso de memoria virtual en un determinado momento. Reporta información acerca de procesos (la columna "r" indica el número de procesos esperando ejecución y la columna "b" indica el número de procesos en estado sleep no interrumpible, generalmente esperando I/O, lo ideal es que ambos valores sean 0); memoria ("swpd" indica la cantidad de memoria virtual utilizada, "free", "buff" y "cache" indican la cantidad de memoria libre, utilizada como buffer y utilizada como caché respectivamente); paginado ("si" y "so" indican la cantidad de páginas por segundo desde y hacia disco); entrada/salida ("bi" y "bo" indican la cantidad de bloques por segundo desde y hacia dispositivos de bloque, por ejemplo disco); interrupciones ("in" y "cs" indican la cantidad de interrupciones y cambios de contexto por segundo respectivamente); y uso de CPU ("cs" indica el tiempo total ejecutando código de usuario, "sy" indica el tiempo total ejecutando código del kernel, "id" indica el tiempo total en que estuvo disponible, "wa" indica el tiempo total esperando I/O y "st" indica el tiempo total robado a máquinas virtuales).

La columna "st" del inglés "Steal Time" (tiempo robado) es una nueva característica en vmstat y top. Esta columna muestra el tiempo total (o el porcentaje en la herramienta top) de CPU que el hypervisor le "robó" a las máquinas virtuales (si estaban haciendo trabajo útil, no cuenta cuando están disponibles "idle") en entornos paravirtualizados (por ejemplo Xen). En otras palabras, es el tiempo en el cual las máquinas virtuales tenían algo ejecutable, pero el hypervisor optó por ejecutar otro proceso en su lugar. Si las máquinas virtuales no necesitan ejecutar nada y el hypervisor ejecuta cualquier proceso, no cuenta como "stolen time".

$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0    288    356    906    0    0     4    26   53   54  1  1 97  1  0

La columna "free" indica que hay 288 MB de memoria libres.

top

La herramienta top provee una vista dinámica en tiempo real del sistema. Además de mostrar un resumen de uso de los recursos del sistema, muestra la lista de tareas actualmente manejadas por el kernel Linux. Debido a la gran cantidad de información y comandos que soporta, es recomendable ejecutar man top y leer el manual con detenimiento.

Si se inicia con la opción "-a" se ordenan las tareas por uso de memoria, es útil para determinar qué aplicaciones están consumiendo más memoria:

$ top -a 
top - 08:25:04 up 1 day, 45 min,  3 users,  load average: 0.00, 0.05, 0.07
Tasks: 256 total,   2 running, 254 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.0%us,  0.7%sy,  0.0%ni, 97.2%id,  1.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3829416k total,  3562700k used,   266716k free,   365976k buffers
Swap:  4000144k total,        0k used,  4000144k free,   936520k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2581 qemu      20   0 1630m 1.1g 5832 S  3.3 30.2  66:08.56 qemu-kvm
27363 pepe      20   0 1039m 130m  20m S  0.0  3.5   0:07.86 chrome
27447 pepe      20   0 1023m 110m  21m S  0.0  3.0   0:07.04 chrome
27316 pepe      20   0  741m 105m  38m S  0.7  2.8   1:20.54 chrome
27371 pepe      20   0 1007m  97m  20m S  0.3  2.6   0:07.11 chrome
 3216 pepe      20   0  297m  74m 8960 S  0.0  2.0   2:49.99 compiz
29224 pepe      20   0  988m  71m  20m S  0.0  1.9   0:06.38 chrome
27467 pepe      20   0 1224m  68m  11m S  0.3  1.8   0:48.67 chrome
 3171 pepe      20   0  706m  64m  26m S  0.0  1.7   0:39.98 yakuake
28076 pepe      20   0  998m  62m  23m S  0.0  1.7   0:07.57 chrome
27440 pepe      20   0  971m  60m  19m S  0.0  1.6   0:01.52 chrome
 7323 pepe      20   0  688m  41m  12m S  0.7  1.1   9:43.57 python
27425 pepe      20   0  950m  36m  18m S  0.0  1.0   0:00.50 chrome
 2937 pepe      20   0 1084m  34m  20m S  0.0  0.9   0:35.54 nautilus
27418 pepe      20   0  946m  30m  16m S  0.0  0.8   0:00.41 chrome
 3161 pepe      20   0  271m  24m 4600 S  0.0  0.7   0:07.68 gnome-screensav
 2638 root      20   0  176m  23m  11m S  0.0  0.6   5:51.83 Xorg
 2989 pepe      20   0  331m  20m  11m S  0.0  0.6   0:00.16 fusion-icon

Para salir de top se debe presionar la tecla 'Q'.

proc

El sistema de archivos proc es un pseudo-file system utilizado como interfase a las estructuras de datos del kernel Linux. Se monta bajo /proc. En su mayor parte es de sólo lectura, pero algunos archivos permiten modificar variables del kernel.

El archivo /proc/meminfo muestra estadísticas de uso de memoria (es utilizado por la herramienta free):

$ cat /proc/meminfo 
MemTotal:        3829416 kB        
MemFree:          232368 kB        
Buffers:          367400 kB        
Cached:           881408 kB        
SwapCached:            8 kB        
Active:          2439300 kB        
Inactive:         833544 kB        
Active(anon):    1880216 kB        
Inactive(anon):   267500 kB        
Active(file):     559084 kB        
Inactive(file):   566044 kB        
Unevictable:           0 kB        
Mlocked:               0 kB        
SwapTotal:       4000144 kB        
SwapFree:        4000136 kB        
Dirty:                88 kB        
Writeback:             0 kB        
AnonPages:       2024152 kB        
Mapped:           151036 kB
Shmem:            123680 kB
Slab:             185252 kB
SReclaimable:     130216 kB
SUnreclaim:        55036 kB
KernelStack:        3520 kB
PageTables:        50020 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5914852 kB
Committed_AS:    3905608 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      363912 kB
VmallocChunk:   34359367236 kB
HardwareCorrupted:     0 kB
AnonHugePages:    745472 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        8192 kB
DirectMap2M:     4102144 kB

El archivo /proc/stat muestra estadísticas de CPU, paginado, entrada/salida y procesos:

$ cat /proc/stat
cpu  435185 53 265956 36606335 519738 99 938 0 95339
cpu0 138725 9 61579 8918589 353738 28 403 0 31646
cpu1 100985 19 77505 9135471 134023 71 139 0 26693
cpu2 108844 16 57007 9284795 18888 0 16 0 19022
cpu3 86630 7 69863 9267478 13088 0 379 0 17977
intr 250774897 122 2 0 0 2 0 0 0 1 0 0 0 1545559 0 0 0 51 0 0 0 0 0 0 3841 316 0 0 0 0 0 0 3042883 712352 1333033 2882727 7882 57704 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 576172943
btime 1349347180
processes 102825
procs_running 1
procs_blocked 1
softirq 44029708 0 15391587 18997 2947335 1428051 0 70816 7594786 90733 16487403

El archivo /proc/swaps muestra el estado de las áreas de intercambio:

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda7                               partition       4000144 8       -1

mpstat

La herramienta mpstat muestra estadísticas de uso de cada CPU:

$ mpstat -P ALL
Linux 2.6.32-279.9.1.el6.x86_64 (hal9000)       10/05/2012      _x86_64_        (4 CPU)

10:12:55 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
10:12:55 AM  all    0.90    0.00    0.70    1.38    0.00    0.00    0.00    0.25   96.76
10:12:55 AM    0    1.14    0.00    0.65    3.71    0.00    0.00    0.00    0.33   94.16
10:12:55 AM    1    0.79    0.00    0.82    1.45    0.00    0.00    0.00    0.28   96.65
10:12:55 AM    2    0.95    0.00    0.60    0.20    0.00    0.00    0.00    0.20   98.04
10:12:55 AM    3    0.73    0.00    0.74    0.14    0.00    0.00    0.00    0.19   98.19

iostat

Reporta estadísticas de CPU y entrada/salida para dispositivos, particiones y sistemas de archivos de red.

$ iostat
Linux 2.6.32-279.9.1.el6.x86_64 (hal9000)       10/05/2012      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.16    0.00    0.71    1.38    0.00   96.76

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              10.26        31.43       215.25    3009169   20611706

La opción "-p" permite mostrar estadísticas de todos los dispositivos y particiones:

$ iostat -p ALL
Linux 2.6.32-279.9.1.el6.x86_64 (hal9000)       10/05/2012      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.16    0.00    0.71    1.38    0.00   96.76

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
ram0              0.00         0.00         0.00          0          0
ram1              0.00         0.00         0.00          0          0
ram2              0.00         0.00         0.00          0          0
ram3              0.00         0.00         0.00          0          0
ram4              0.00         0.00         0.00          0          0
ram5              0.00         0.00         0.00          0          0
ram6              0.00         0.00         0.00          0          0
ram7              0.00         0.00         0.00          0          0
ram8              0.00         0.00         0.00          0          0
ram9              0.00         0.00         0.00          0          0
ram10             0.00         0.00         0.00          0          0
ram11             0.00         0.00         0.00          0          0
ram12             0.00         0.00         0.00          0          0
ram13             0.00         0.00         0.00          0          0
ram14             0.00         0.00         0.00          0          0
ram15             0.00         0.00         0.00          0          0
loop0             0.00         0.00         0.00          0          0
loop1             0.00         0.00         0.00          0          0
loop2             0.00         0.00         0.00          0          0
loop3             0.00         0.00         0.00          0          0
loop4             0.00         0.00         0.00          0          0
loop5             0.00         0.00         0.00          0          0
loop6             0.00         0.00         0.00          0          0
loop7             0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0
sda              10.28        31.42       215.34    3017897   20685107
sda1              0.01         0.24         0.00      22600         89
sda2              0.06         3.02         0.34     290278      32568
sda3              1.45         2.76        26.36     264704    2532545
sda4              0.00         0.00         0.00          4          0
sda5              7.11        14.59       170.06    1401938   16335170
sda6              0.20         8.11         0.38     779018      36306
sda7              0.01         0.03         0.00       2900          0
sda8              0.95         2.67        18.20     256111    1748429

sar

Colecta y reporta estadísticas del sistema. Basándose en los valores de los parámetros de intervalo y cuenta, escribe información estadística. Los datos recolectados pueden guardarse en un archivo especificando la opción "-o" y un nombre de archivo. Si se omite el nombre de archivo, sar utiliza el archivo de datos estándar del sistema /var/log/sa/sadd, donde el parámetro dd indica el día actual. Además el comando sar extrae y escribe en la salida estándar los registros guardados previamente en un archivo (se puede utilizar la opción "-f" o utilizar el archivo diario por defecto).

Por ejemplo, para mostrar estadísticas de uso de CPU cada 1 segundo diez veces se puede utilizar:

$ sar -u 1 10
Linux 2.6.32-279.9.1.el6.x86_64 (hal9000)       10/05/2012      _x86_64_        (4 CPU)

10:28:37 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:28:38 AM     all      1.01      0.00      0.75      1.26      0.00     96.98
10:28:39 AM     all      1.00      0.00      1.25      1.00      0.00     96.75
10:28:40 AM     all      1.01      0.00      0.76      1.52      0.00     96.72
10:28:41 AM     all      1.00      0.00      0.75      1.50      0.00     96.74
10:28:42 AM     all      1.25      0.00      0.75      1.75      0.00     96.24
10:28:43 AM     all      1.01      0.00      0.75      1.26      0.00     96.98
10:28:44 AM     all      2.01      0.00      0.50      1.01      0.00     96.48
10:28:45 AM     all      1.25      0.00      1.50      1.25      0.00     95.99
10:28:46 AM     all      1.26      0.00      0.50      1.76      0.00     96.48
10:28:47 AM     all      1.01      0.00      1.01      1.51      0.00     96.48
Average:        all      1.18      0.00      0.85      1.38      0.00     96.59

sar es una herramienta muy compleja y avanzada, por lo que les recomiendo leer este artículo.

Es recomendable leer el manual de cada una de estas herramientas para sacarles todo el jugo!


Tal vez pueda interesarte


Compartí este artículo