¡Esta es una revisión vieja del documento!
Tabla de Contenidos
LPI Topic 200: Capacity Planning
- 200.1: Recursos y Medidas para la resolución de problemas (6)
- 200.2: Predicción de futuros recursos (2)
200.1: Recursos y Medidas para la Resolución de Problemas
Monitorizar recursos:
- CPU
- Memoria (RAM/SWAP)
- Carga del sistema (Load Average)
- Consumo de recursos de red (Network)
iostat
Monitor de I/O y CPU
Necesario instalar el paquete sysstat
iostat [options] [interval] [count] [device]
- c: estadísticas CPU
- d: estadísticas de los dispositivos
Datos de un dispositivo:
iostat /dev/sda
Ejemplo de salida:
Linux 4.19.0-14-amd64 (debian10) 	03/27/2021 	_x86_64_	(2 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.14    0.02    0.00   99.78
Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               2.91        57.48         1.63      95315       2701
Si queremos que la información de CPU (también funciona para dispositivos) se actualice cada 2 segundos, pero 5 veces:
iostat -c 2 3
Ejemplo de salida:
Linux 4.19.0-14-amd64 (debian10) 	03/27/2021 	_x86_64_	(2 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.13    0.02    0.00   99.79
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00
Salida en dispositivos
- tps: transferencias por segundo
- kB_read/s: lecturas por segundo en KB
- kB_wrtn/s: escrituras por segundo en KB
- kB_read: total de lecturas en KB
- kB_wrtn: total de escrituras en KB
Salida en CPU
- %user: uso CPU durante ejecución a nivel de usuario
- %nice: uso CPU durante ejecución con nice (prioridad)
- %system: uso CPU durante ejecución a nivel de sistema (kernel)
- %iowait: tiempo ocioso de CPU a la espera de operaciones I/O
- %steal: tiempo dedicado a la espera de la CPU virtual mientras el hipervisor atendría otros procesadores virtuales (si estamos virtualizando sobre la máquina)
- %idle: tiempo ocioso de CPU sin esperar operaciones
vmstat
Estadísticas de memoria virtual sobre procesos, memoria, paginación, bloques I/O y utilización de CPU
vmstat [options] [delay] [count]
vmstat 2 3
Ejemplo de salida:
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 859744 12056 88900 0 0 26 1 12 33 0 0 100 0 0 0 0 0 859736 12056 88936 0 0 0 0 20 26 0 0 100 0 0 0 0 0 859736 12056 88936 0 0 0 0 14 18 0 0 100 0 0
Actualiza la información cada 2 segundos, 3 veces y finaliza.
Salida
Columna de procs:
- r: indica el número de procesos actualmente en la cola de ejecución
- b: indica el número de procesos actualmente en la cola de bloques. Estos procesos están a la espera de un dispositivo.
Columna de memory:
- swpd: indica la cantidad de memoria virtual uytilizada en KB
- free: indica la cantidad de memoria libre,que no está en uso
- buff: indica la cantidad de memoria asignada a buffers, esta contiene bloques de disco sin procesar.
- cache: indica la cantidad de memoria cache (contiene archivos)
Columna de swap:
- si: indica la cantidad de memoria que se intercambia desde el disco (a la swap)
- so: indica la cantidad de memoria que se intercambia hacia el disco (desde la swap)
Columna io:
- bi: indica la cantidad de bloques por segundo que se recibe desde un dispositivo de bloques
- bo: indica la cantidad de bloques por segundo que se envía a un dispositivo de bloques
Columna system:
- in: indica el número de interrupciones por segundo. Las interrupciones son las peticiones que hacen los dispositivos para acceder a la CPU.
- cs: muestra el número de cambios de contexto por segundo. La CPU tiene varios hilos de ejecución y cada uno se corresponde con un proceso. La CPU puede desatender ese hilo para pasar a otro y volver luego. Cada uno de esos “saltos” es lo que se conoce como cambio de contexto.
Columna cpu:
- us: muestra el porcentaje de tiempo dedicado a la ejecución de código que no es del kernel
- sy: muestra el porcentaje de tiempo dedicado a la ejecución de código del kernel
- id: muestra el porcentaje de tiempo de inactividad
- wa: muestra el porcentaje de tiempo de espera para I/O
- st: muestra el porcentaje de tiempo robado por una máquina virtual
netstat
Listado de las conexiones activas de nuestra máquina. Además, permite obtener información de la red y los protocolos utilizados.
netstat [opciones]
- i: estadísticas de las interfaces de red (como un- ifconfigo- ip link)
- r: muestra las tablas de rutas (como el comando- route)
Lo habitual es usarlo para listar las conexiones que tiene el sistema, ips de origen y destino, etc:
netstat -putan
Ejemplo de salida:
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/init tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 434/sshd tcp 0 0 192.168.2.10:22 192.168.2.1:33500 ESTABLISHED 561/sshd: vagrant [ tcp6 0 0 :::111 :::* LISTEN 1/init tcp6 0 0 :::22 :::* LISTEN 434/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 533/dhclient udp 0 0 0.0.0.0:111 0.0.0.0:* 1/init udp6 0 0 :::111 :::* 1/init
ps
Muestra la lista de procesos en ejecución.
Tiene muchísimas opciones, pero algunos casos típicos:
ps -ef
La más usada:
ps aux
Ejemplo de salida:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.9 21992 9976 ? Ss 14:50 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S 14:50 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 14:50 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 14:50 0:00 [rcu_par_gp] root 6 0.0 0.0 0 0 ? I< 14:50 0:00 [kworker/0:0H-kblockd] root 8 0.0 0.0 0 0 ? I< 14:50 0:00 [mm_percpu_wq] root 9 0.0 0.0 0 0 ? S 14:50 0:00 [ksoftirqd/0] root 10 0.0 0.0 0 0 ? I 14:50 0:00 [rcu_sched] root 11 0.0 0.0 0 0 ? I 14:50 0:00 [rcu_bh] root 12 0.0 0.0 0 0 ? S 14:50 0:00 [migration/0] root 14 0.0 0.0 0 0 ? S 14:50 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S 14:50 0:00 [cpuhp/1] root 16 0.0 0.0 0 0 ? S 14:50 0:00 [migration/1] root 17 0.0 0.0 0 0 ? S 14:50 0:00 [ksoftirqd/1] (...)
Salida
- UID: usuario propietario del proceso
- PID: identificador del proceso
- PPID
- C
- STIME
- TTY: terminal a la que está asociada
- TIME
- CMD
pstree
Muestra la misma lista de procesos que ps y top, pero la salida se obtien en formato árbol viendo así la dependencia que tienen los procesos.
En Debian 10, pertenece al paquete psmisc
Ejemplo de salida:
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VBoxSVC─┬─2*[VBoxHeadless───30*[{VBoxHeadless}]]
        │         ├─VBoxHeadless───29*[{VBoxHeadless}]
        │         ├─VBoxNetDHCP───2*[{VBoxNetDHCP}]
        │         └─13*[{VBoxSVC}]
        ├─VBoxXPCOMIPCD
        ├─colord───2*[{colord}]
        ├─cupsd
        ├─dbus-daemon
        ├─firefox─┬─Privileged Cont───24*[{Privileged Cont}]
        │         ├─RDD Process───2*[{RDD Process}]
        │         ├─Web Content───25*[{Web Content}]
        │         ├─2*[Web Content───24*[{Web Content}]]
        │         ├─WebExtensions───21*[{WebExtensions}]
        │         └─71*[{firefox}]
(...)
w
Muestra la información de los usuarios actualmente conectados y las mismas estadísticas que el comando uptime.
load average debe ser menor que 1. si lo supera, la carga es elevada.
Ejemplo de salida:
16:24:36 up 36 min, 1 user, load average: 1,43, 1,19, 0,76 USER TTY LOGIN@ IDLE JCPU PCPU WHAT tempwin tty1 15:48 36:27 5:04 0.00s xinit /home/tempwin/.xinitrc -- /etc/X11/xinit
lsof
Muestra información acerca de los ficheros abiertos y sus correspondientes procesos,
lsof +d /var/log
- +d: es para indicar directorio en lugar de fichero.
Ejemplo de salida:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 363 root 7w REG 254,0 207327 2359398 /var/log/syslog rsyslogd 363 root 8w REG 254,0 125147 2359400 /var/log/kern.log rsyslogd 363 root 9w REG 254,0 17018 2359401 /var/log/debug rsyslogd 363 root 10w REG 254,0 109465 2359402 /var/log/messages rsyslogd 363 root 11w REG 254,0 31109 2359403 /var/log/auth.log rsyslogd 363 root 12w REG 254,0 76530 2359399 /var/log/daemon.log rsyslogd 363 root 13w REG 254,0 533 2359320 /var/log/user.log
Este comando es interesante para saber qué procesos están asociados a determinados ficheros.
free
Muestra una visión en tiempo real de la cantidad de memoria física y virtual de un sistema
free [options]
- l: muestra estadísticas detalladas del consumo de memoria
- k: muestra las estadísticas en kB
- m: muestra las estadísticas en MB
- g: muestra las estadísticas en GB
- h: formato legible por humanos
free -h
Ejemplo de salida:
total used free shared buff/cache available Mem: 987Mi 51Mi 718Mi 2.0Mi 216Mi 797Mi Swap: 979Mi 0B 979Mi
top
Muestra una visión en tiempo real del sistema en ejecución
También podemos conocer el proceso que más memoria consume (o CPU) o incluso modificar la prioridad o matarlo.
Ejemplo de salida:
top - 15:27:35 up 37 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  79 total,   1 running,  78 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    987.2 total,    718.2 free,     51.7 used,    217.3 buff/cache
MiB Swap:    980.0 total,    980.0 free,      0.0 used.    797.4 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                  
 1334 vagrant   20   0   10976   3536   3076 R   0.3   0.3   0:00.01 top                                                                                                                      
    1 root      20   0   21992   9976   7728 S   0.0   1.0   0:00.96 systemd                                                                                                                  
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd                                                                                                                 
    3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                                                                   
    4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                                                                               
    6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd                                                                                                     
    8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                                                                                             
    9 root      20   0       0      0      0 S   0.0   0.0   0:00.04 ksoftirqd/0                                                                                                              
   10 root      20   0       0      0      0 I   0.0   0.0   0:00.07 rcu_sched                                                                                                                
(...)
uptime
Muestra el tiempo que el sistema lleva en funcionamiento, el número de usuarios conectados y la carga del sistema en los últimos 1, 5 y 15 minutos.
Ejemplo de salida:
15:28:06 up 37 min, 1 user, load average: 0.00, 0.00, 0.00
sar
Recoge informes o guarda información de la actualidad del sistema para poder hacer consultas posteriormente.
sar forma parte del paquete sysstat
sar [options] [interval] [count]
sar -b 1 2
sar necesita que esté funcionando el servicio sysstat y que la recopilación de datos esté activada desde el fichero /etc/default/sysstat:
ENABLED="true"
200.2: Predicción de Futuros Recursos
Haciendo uso de las herramientas y conocimientos del topic 200.1, debería ser posible diagnosticar el uso de los recursos de los componentes o procesos específicos.
Los pasos para predecir las necesidades futuras podrían ser:
- Decidir qué medir
- Utilizar las herramientas adecuadas para medir y registrar los datos correspondientes y sus dispositivos
- Analizar los resultados de la medición, comenzando por aquellos donde las fluctuaciones sean mayores.
- Predecir las necesidades futuras basadas en el análisis.
Además de sar, collectd es una de las herramientas que se pueden utilizar para controlar una infraestructura de TI.
collectd
Deminio que recoge las estadísticas de rendimiento del sistema periódicamente y proporciona mecanismos para almacenar los valores de diferentes formas.
Las estadísticas se pueden utilizar para:
- Los cuellos de botella de rendimiento actuales (análisis de rendimiento)
- Predecir la carga del sistema futuro (planificación de capacidad)
Características:
- Escrito en C (rendimiento y portabilidad)
- Incluye más de 90 plugins
- Proporciona características de red de gran alcance y es extensible de muchas maneras.
