Herramientas de usuario

Herramientas del sitio


informatica:certificaciones:lpic:lpic-2:200_capacity_planning:200.1_measure_and_troubleshoot_resource_usage

200.1 Measure and Troubleshoot Resource Usage

Pertenece a LPI Topic 200: Capacity Planning

  • Weight: 6
  • Description: Candidates should be able to measure hardware resource and network bandwidth, identify and troubleshoot resource problems.
  • Key Knowledge Areas:
    • Measure CPU usage
    • Measure memory usage
    • Measure disk I/O
    • Measure network I/O
    • Measure firewalling and routing throughput
    • Map client bandwidth usage
    • Match / correlate system symptoms with likely problems
    • Estimate throughput and identify bottlenecks in a system including networking
  • The following is a partial list of the used files, terms and utilities:
    • iostat
    • netstat
    • w
    • top
    • sar
    • processes blocked on I/O
    • blocks out
    • vmstat
    • pstree, ps
    • lsof
    • uptime
    • swap
    • blocks in

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, y se muestre 3 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.

La opción -S permite elegir la unidad de visualización (k miles de bytes, K KB, m millón de bytes, M MB). Ejemplo: vmstat -S M

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 (modo usuario)
  • sy: muestra el porcentaje de tiempo dedicado a la ejecución de código del kernel (modo núcleo)
  • 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

La opción -s muestra una tabla resumen del uso de la memoria desde el arranque del sistema.

root@debian10:~# vmstat -s -S M
          987 M total memory
           83 M used memory
          204 M active memory
          331 M inactive memory
          344 M free memory
           45 M buffer memory
          513 M swap cache
          979 M total swap
            0 M used swap
          979 M free swap
         7455 non-nice user cpu ticks
            2 nice user cpu ticks
         6138 system cpu ticks
      8615838 idle cpu ticks
         1304 IO-wait cpu ticks
            0 IRQ cpu ticks
         1307 softirq cpu ticks
            0 stolen cpu ticks
       375434 pages paged in
      1008360 pages paged out
            0 pages swapped in
            0 pages swapped out
      1314791 interrupts
      1614147 CPU context switches
   1619662769 boot time
         6233 forks

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 ifconfig o ip link)
  • r: muestra las tablas de rutas (como el comando route)
  • n: muestra las conexiones activas impidendo la resolución inversa de las direcciones IP y puertos, así la visualización es más rápida
  • p: procesos responsables de las conexiones de red
  • a: muestra sockets que están en escucha y los que no.
  • t: solo conexiones TCP.

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

El comando acepta diferentes sintaxis:

  • La sintaxis Unix, en que la opciones deben llevar el guión delante.
  • La sintaxis BSD, en que las opciones no llevan el guión.
  • La sintaxis GNU, en que las opciones deben llevar un doble guión delante

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

  • USER: usuario propietario del proceso
  • PID: identificador del proceso
  • %CPU: Porcentaje de ocupación acumulada del procesador
  • %MEM: Porcentaje de ocupación de memoria acumulado del procesador
  • VSZ: Tamaño de memoria virtual del proceso
  • RSS: Tamaño de memoria residente del proceso
  • PPID: Identificador del proceso padre del proceso
  • C: Clase de prioridad
  • STIME: Fecha de creación (Start time) del proceso
  • TTY: terminal a la que está asociada
  • STAT: Estado del proceso (S sleep, R running)
  • START: Fecha de creación del proceso
  • TIME: Tiempo de procesador acumulado del proceso
  • CMD: Comando ejecutado

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.

Si queremos ver los archivos abiertos por el usuario menganito:

lsof -u menganito

Para ver los archivos abiertos en la partición /dev/sdb1:

lsof /dev/sdb1

Proceso que ha abierto el fichero /var/log/syslog:

lsof /var/log/syslog

Todos los sockets de Internet abiertos:

lsof -i

procfs

El pseudosistema de archivos procfs permite obtener información sobre el uso de archivos por parte de un proceso. Basta leer algunos archivos especiales en el directorio virtual del proceso.

Por ejemplo, buscamos primero el PID de cierto proceso:

[root@linux~]# ps -ef
root 6340 5419 0 09:54 pts/0 00:00:00 ./reader

Con el PID 6340 vamos a /proc/6340 y listamos el contenido del directorio fd:

[root@linux ~]# cd /proc/6340
[root@linux 6340]# ls fd
0 1 2 3

El proceso ha abierto cuatro archivos y los tres primeros probablemente son las entradas/salidas estándar.

[root@beta64 6340]# ls -l fd/3
lr-x------. 1 root 64 16 jul. 09:55 fd/3 -> /etc/passwd

El proceso ha abierto el archivo /etc/passwd en modo de solo lectura (lr-).

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 el valor promedio de 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

Los valores de load average hay que ponderarlos en función del número de procesadores; un valor de 4 es normal para un procesador de cuatro núcleos, pero no para un procesador de un núcleo.

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]

Algunas opciones:

  • -r: controla el uso de la memoria RAM
  • -b: permite controlar la utilización de los discos
sar -b 1 2

Si no se especifica ninguna opción, sar visualizará información sobre procesador/es.

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"

Ejemplo de salida:

Linux 4.19.0-14-amd64 (debian10) 	03/27/2021 	_x86_64_	(2 CPU)

01:20:46 PM  LINUX RESTART	(2 CPU)

01:34:14 PM  LINUX RESTART	(2 CPU)

02:55:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:05:01 PM     all      0.01      0.00      0.05      0.01      0.00     99.93
03:15:01 PM     all      0.04      0.00      0.08      0.01      0.00     99.86
03:25:01 PM     all      0.13      0.00      0.05      0.08      0.00     99.74
Average:        all      0.06      0.00      0.06      0.03      0.00     99.85

strace

Visualiza las llamadas a sistema que realizan los procesos.

strace pertenece al paquete de Debian strace

# strace echo "Hola"
execve("/usr/bin/echo", ["echo", "Hola"], 0x7ffc38bfc248 /* 17 vars */) = 0
brk(NULL)                               = 0x55af8c00d000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26030, ...}) = 0
mmap(NULL, 26030, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f77d1f99000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260A\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f77d1f97000
mmap(NULL, 1837056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f77d1dd6000
mprotect(0x7f77d1df8000, 1658880, PROT_NONE) = 0
mmap(0x7f77d1df8000, 1343488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f77d1df8000
mmap(0x7f77d1f40000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16a000) = 0x7f77d1f40000
mmap(0x7f77d1f8d000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7f77d1f8d000
mmap(0x7f77d1f93000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f77d1f93000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f77d1f98540) = 0
mprotect(0x7f77d1f8d000, 16384, PROT_READ) = 0
mprotect(0x55af8aed7000, 4096, PROT_READ) = 0
mprotect(0x7f77d1fc7000, 4096, PROT_READ) = 0
munmap(0x7f77d1f99000, 26030)           = 0
brk(NULL)                               = 0x55af8c00d000
brk(0x55af8c02e000)                     = 0x55af8c02e000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3031632, ...}) = 0
mmap(NULL, 3031632, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f77d1af1000
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
write(1, "Hola\n", 5Hola
)                   = 5
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++
informatica/certificaciones/lpic/lpic-2/200_capacity_planning/200.1_measure_and_troubleshoot_resource_usage.txt · Última modificación: por tempwin