ArchiTecnologia

Aprendizaje abierto. Conocimiento libre.

ArchiTecnologia
CertificacionesLinuxLPITutorial

LPIC-2 Tema 200.1: medidas y resolución de problemas de recursos

Primer artículo de la serie LPIC-2. Una vez completé todos los artículos sobre las certificaciones LPIC-1, ahora comenzamos con la segunda parte para los que quieran realizar estas certificaciones para ser administradores de sistemas GNU/Linux. Y, concretamente, se comienza con el Tema 200.1 sobre las medidas y resolución de problemas de recursos.

Es decir, los candidatos deberán poder demostrar que tienen las competencias necesarias para realizar mediciones de los recursos de hardware y redes en el sistema, además de diagnosticar problemas y solucionarlos. Por ejemplo, medir el uso de CPU, memoria, almacenamiento, redes, identificar cuellos de botella, etc.

Intentaré resumir al máximo algunos procedimientos y descripciones, y que es un tema de arquitectura de computadoras que daría para mucho. Pero para los exámenes, con esto es suficiente…

Recuerda que yo solo muestro ejemplos de los comandos. Para ver más opciones consulta el manual de cada uno.

Monitorización de la RAM

Deberías saber que la memoria principal, o RAM, no es más que una memoria intermediaria por la que pasan los procesos (programas: datos e instrucciones) de forma temporal. De esa forma, la CPU no tiene que ir a buscarlos al medio de almacenamiento secundario, es decir, al disco duro. De lo contrario, el tiempo de acceso, o latencia, serían mucho mayores.

Para evitar ese cuello de botella, se hace uso de una memoria más rápida que la secundaria y que alimentará a la cache de la CPU. Además, ya deberías saber que la SWAP no es más que una extensión de la RAM almacenada en disco, para que el kernel del sistema operativo pueda descargar allí procesos que no tienen máxima prioridad, dejando así hueco en la RAM para los que si la tienen…

Además de esta breve explicación, también deberías conocer la terminología para interpretar la información que arrojan los comandos:

Término

Descripción

Página

Cada uno de los bloques que se usan en memoria, para dividir a los programas.

Paginación

Procedimiento para dividir la información de la memoria en porciones llamadas páginas.

SWAP

La partición o fichero de intercambio no es más que una porción del disco duro usada como una extensión de la RAM, como he comentado anteriormente. Mediante unos algoritmos de gestión, el kernel podrá subir procesos desde este espacio a la RAM, si tienen mayor prioridad, o descargarlos nuevamente al espacio de intercambio en caso de que no sean prioritarios… Además, todo esto se puede controlar (véase Swappiness, Cache Pressure).

Memoria virtual

Es el total de memoria asignable y conocida por los procesos del sistema operativo (RAM y la de intercambio), para que así se pueda contar con mayor cantidad de la que realmente hay físicamente.

TLB (Translation Lockaside Buffer)

Es una tabla que la CPU usa para acelerar la traducción citada anteriormente. Un buffer que ayuda a la MMU, la que se encarga de la traducción entre direcciones virtuales y reales.

E/S

El espacio de entrada/salida (I/O o Input/Output) también se trata como si fuesen direcciones de memoria. Es decir, los periféricos de entrada y salida también son interpretados por la arquitectura como memorias a las que se envía información (dispositivo de salida) o de las que se lee información (entrada). Por ejemplo, imagina un sistema que puede direccionar desde la dirección 0000h hasta la ffffh, dejando la primera parte de direcciones para la memoria real y desde la desde la dirección de D000h hasta ffffh para E/S.

Caché de página

Las páginas de memoria usadas recientemente se almacenan aquí. No se refiere a la memoria caché de la CPU. Ésta es mantenida por el sistema operativo en una porción de la RAM, y el procedimiento es totalmente transparente a las aplicaciones.

Buffers

Se utiliza para algunos dispositivos de bloque, como una memoria intermedia para acelerar los accesos.

Una vez puedas identificar los términos más básicos, lo siguiente es conocer las herramientas que tienes a tu alcance para poder monitorizar la memoria. De esa forma, podrás diagnosticar si existen problemas de recursos en tu sistema y solucionarlos:

#Como alternativa a free puedes usar
cat /proc/meminfo

#Comprobar la memoria que hay libre y usada en el sistema, tanto la SWAP como la RAM
free

#Puedes usar -b -k -m -g para especificar en la unidad que quieras
free -g

#O usar -h para mostrar una salida más amigable para humanos
free -h

#También puedes monitorizar estadísticas sobre la memoria virtual
vmstat
vmstat -S M

En el último comando, podrás ver varias columnas:

  • PROCS: procesos, indicando si está en espera (r), o si está dormido (d).
  • MEMORY: para mostrar la memoria virtual usada (swpd), la memoria física disponible (free), la memoria usada por los buffers (buff), y la cache de E/S (cache).
  • SWAP: para la memoria de intercambio. Con el tamaño de la memoria leída (si) y almacenada (so).
  • IO: para el sistema de E/S. Con el número de bloques por segundo leídos (bi), y el número de bloques por segundo escritos (bo).
  • SYSTEM: indica información sobre el sistema. Con el número de instrucciones por segundo (in), número de cambios de contexto por segundo (cs).
  • CPU: con el porcentaje de tiempo de CPU usado en modo usuario (us), el porcentaje de tiempo usado en modo kernel (sy), el porcentaje de tiempo inactivo/ocioso o idle (id) y el porcentaje de tiempo en espera de E/S (wa).

Por cierto, también podrías ver el tiempo de CPU consumido por un usuario con el comando:

w

Monitorización de la CPU y procesos

En cuanto a la CPU, ya sabes que es la encargada de interpretar las instrucciones y aplicar las operaciones oportunas sobre los datos para obtener los resultados, es decir, procesar los programas. Para ello, deberá estar alimentada constantemente con datos e instrucciones proveniente desde la memoria, con la prioridad que marque el scheduler o planificador del kernel (según prioridades).

Promedio de carga y uptime

Para monitorizar datos interesantes puedes usar un comando con el que mostrar detalles sobre la carga de trabajo de tu CPU es:

uptime

El promedio de carga (Load Average) es un promedio de la carga de trabajo del sistema. Muestra la demanda de los subprocesos o tareas que se están ejecutando, y los que esperan. La gran mayoría de herramientas muestran tres valores: promedio de carga en el último minuto, promedio de carga en los últimos 5 minutos, y promedio de carga en los 15 últimos minutos.

Esto es válido para uptime, w, top, y htop.

El problema es que esos valores realmente no son promedios, ni tampoco son de los 1, 5 y 15 minutos exactos. Por ejemplo, si tienes un sistema con carca 0 e inicias una tarea en bucle, se supone que pasado 1 min el promedio debería subir a 1, pero en la realidad obtienes valores extraños, y dependería del tipo de tarea. Esto es así por la forma en la que se calculan estos valores y porque en antiguos UNIX se calculaba solo los procesos en espera.

Además, si existen múltiples CPUs (MP), o una CPU con varios núcleos, o ambos, el promedio de carga funcionará de forma diferente. Por ejemplo, si tienes un promedio de 2 en un sistema con una sola CPU, significa que se ha sobrecargado el sistema, ya que un proceso está ocupando el 100% de la CPU y otro proceso está a la espera.

Si ese mismo valor 2 sucede en un sistema con dos CPUs, o dos núcleos, entonces el sistema estaría al 100%, procesando los dos procesos al mismo tiempo. Pero si se sube a 4 núcleos, el valor 2 significaría que dos procesos están usando dos núcleos, mientras otros dos están esperando.

Para calcular la carga real, puedes aplicar:

(Carga media / nº de núcleos de CPU) · 100 = % real de carga media del sistema

Por ejemplo, en el caso del sistema de 4 núcleos, el valor dos indicaría que está al 50% de su capacidad:

(2/4) · 100 = 50%

Así, podrás detectar si un equipo sufre de escasez de recursos de CPU, ya que si constantemente (si está en momentos puntuales no es problema) está muy congestionado próximo al 100% o al 100%, entonces no estaría de más reducir la carga o ampliar el hardware.

Procesos

Otros comandos que te pueden ayudar a monitorizar si existen problemas de recursos en tu sistema son:

También podrías usar el comando sar, que muestra información de la actividad del sistema.

#Muestra un árbol de procesos para ver la relación entre procesos padres e hijos
pstree

#Para ver información también de los threados o LWP (como los llama Linux)
pstree -pau -l -G -s

#Este ya lo vimos en artículos anteriores, para mostrar información de los procesos
ps
ps aux

#También puedes usar para threads
ps -eL

En cuanto a la salida de éste último comando, deberías saber interpretar sus columnas:

  • PID: el ID del proceso.
  • TTY: el terminal de control.
  • STAT: el estado del proceso.
    • R: en ejecución.
    • D: interrumpido.
    • S: suspendido.
    • s: líder de sesión.
    • T: detenido.
    • Z: zombie, cuando un proceso hijo termina antes que el padre, se mantienen los recursos asignados al hijo hasta que termina el padre. El hijo está muerto, pero no se puede destruir para liberar recursos. En raras ocasiones, el zombie puede estar huérfano.
    • N: marca una prioridad por debajo de lo normal.
    • <: prioridad por encima de lo normal.
  • TIME: tiempo de CPU empleado hasta el momento por dicho proceso.
  • LWP: Light-Weight Process, es un proceso ligero o thread. Es decir, las partes en las que se puede subdividir un proceso.
  • COMMAND: el programa correspondiente al proceso.
  • F: las flags o banderas del proceso. 0 cuando no hay asignadas, 1 para identificar un hijo no ejecutado, 4 para privilegios root, etc.
  • UID: el ID del usuario que inició el proceso.
  • PPID: PID del proceso padre.
  • PGID: ID del grupo que inició el proceso.
  • PRI: prioridad que tiene el proceso.
  • NI: valor nice.
  • VSZ: tamaño de la memoria virtual asignada al proceso en KB.
  • RSS: tamaño de la memoria física usada en KB.
  • WCHAN: en procesos dormidos, o en espera, muestra el evento que los despierta.

Recuerda que también puedes obtener información de /proc/<PID>/.

Por otro lado, también puedes hacer uso de otras alternativas, como:

#Muestra los procesos activos en tu sistema en tiempo real (para salir pulsa q)
top

Este comando top arroja una información muy importante al comienzo de su salida. Deberías saber interpretar dicha cabecera:

  • hh:mm:ss up xx, n users, load average: x.xx x.xx x.xx: hora actual, tiempo uptime, número de usuarios conectados, y el promedio de carga.
  • Taks: xx total, x running, x sleeping, x stopped, x zombie: muestra el total de procesos ejecutándose, y catalogados según el estado.
  • Cpu(s): x.x%us, x.x%sy, x.x%ni, x.x%id, x.x%wa, x.x%hi, x.x%si, x.x%st: muestra el uso actual de la CPU para el usuario, sistema, tiempo en espera, etc.
  • Memory: xxxk total, xxxk used, xxxk free, xxxk buffers: valores referentes a la memoria física.
  • Swap: xxxk total, xxxk used, xxxk free, xxxk buffers: valores referentes a la memoria de intercambio.
  • La siguiente fila son los nombres de las columnas de la información de los procesos en marcha (similar a lo de ps).

Monitorización del almacenamiento

Para poder comprobar problemas de disco duro, deberías monitorizar el E/S del sistema. Para ello, tienes comandos como:

#Para monitorizar ciertas estadísticas de E/S
iostat

#Solo estadísticas de CPU referentes a E/S
iostat -c

#Solo sobre el disco duro
iostat -d

#Incluso puedes filtrar por dispositivo
iostat -p sda

#Para volúmenes lógicos
iostat -N

#También puedes usar el comando sar para estadísticas del sistema, especificando el tiempo entre consultas y la cantidad de consultas
sar 2 5

#Monitorizar los ficheros abiertos por un proceso, puertos, usuarios, etc
lsof

#Para un proceso concreto
lsof -p <PID>

Monitorización de la red

También puedes monitorizar lo que sucede con las redes. Para eso existen multitud de herramientas, algunas ya las vimos, otras que puedes usar son:

#Para redes puedes monitorizar el E/S con
iostat -n

#Para puertos y servicios de redes 
lsof -i 
lsof -i -nP

#O comprobar el estado de redes con
netstat -a

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar