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!