Cómo monitorear el uso del sistema, interrupciones y solucionar problemas de servidores Linux - Parte 9


Aunque Linux es muy confiable, los administradores de sistemas inteligentes deben encontrar la manera de vigilar el comportamiento y la utilización del sistema en todo momento. Garantizar un tiempo de actividad lo más cercano al 100% como sea posible y la disponibilidad de recursos son necesidades críticas en muchos entornos. Examinar el estado actual y pasado del sistema nos permitirá prever y probablemente prevenir posibles problemas.

Presentamos el programa de certificación de la Fundación Linux

En este artículo, presentaremos una lista de algunas herramientas que están disponibles en la mayoría de las distribuciones ascendentes para verificar el estado del sistema, analizar interrupciones y solucionar problemas en curso. Específicamente, de la gran cantidad de datos disponibles, nos centraremos en la CPU, el espacio de almacenamiento y la utilización de la memoria, la gestión básica de procesos y el análisis de registros.

Utilización del espacio de almacenamiento

Hay dos comandos conocidos en Linux que se utilizan para inspeccionar el uso del espacio de almacenamiento: df y du .

El primero, df (que significa disco libre), se usa normalmente para informar el uso general del espacio en disco por sistema de archivos.

Sin opciones, df informa el uso de espacio en disco en bytes. Con el indicador -h , mostrará la misma información utilizando MB o GB en su lugar. Tenga en cuenta que este informe también incluye el tamaño total de cada sistema de archivos (en bloques de 1 K), los espacios libres y disponibles y el punto de montaje de cada dispositivo de almacenamiento.

# df
# df -h

Eso es ciertamente bueno, pero hay otra limitación que puede inutilizar un sistema de archivos y es quedarse sin inodos. Todos los archivos de un sistema de archivos se asignan a un inodo que contiene sus metadatos.

# df -hTi

puede ver la cantidad de inodos usados u200bu200by disponibles:

De acuerdo con la imagen anterior, hay 146 inodos usados u200bu200b( 1% ) en/home, lo que significa que aún puede crear archivos de 226K en ese sistema de archivos.

Tenga en cuenta que puede quedarse sin espacio de almacenamiento mucho antes de quedarse sin inodos, y viceversa. Por esa razón, necesita monitorear no solo la utilización del espacio de almacenamiento sino también el número de inodos usados u200bu200bpor el sistema de archivos.

Utilice los siguientes comandos para buscar archivos o directorios vacíos (que ocupan 0B) que utilizan inodos sin una razón:

# find  /home -type f -empty
# find  /home -type d -empty

Además, puede agregar la marca -delete al final de cada comando si también desea eliminar esos archivos y directorios vacíos:

# find  /home -type f -empty --delete
# find  /home -type f -empty

El procedimiento anterior eliminó 4 archivos. Revisemos nuevamente la cantidad de nodos usados u200bu200b/ disponibles en/home:

# df -hTi | grep home

Como puede ver, hay 142 inodos usados u200bu200bahora (4 menos que antes).

Si el uso de un determinado sistema de archivos está por encima de un porcentaje predefinido, puede usar du (abreviatura de uso del disco) para averiguar cuáles son los archivos que ocupan más espacio.

El ejemplo se da para /var , que como puede ver en la primera imagen de arriba, se usa al 67%.

# du -sch /var/*

Nota: que puede cambiar a cualquiera de los subdirectorios anteriores para averiguar exactamente qué hay en ellos y cuánto ocupa cada elemento. A continuación, puede utilizar esa información para eliminar algunos archivos si no son necesarios o ampliar el tamaño del volumen lógico si es necesario.

Leer también

  1. 12 Useful “df” Commands to Check Disk Space
  2. 10 Useful “du” Commands to Find Disk Usage of Files and Directories

Utilización de memoria y CPU

La herramienta clásica en Linux que se utiliza para realizar una verificación general de la utilización de CPU/memoria y la gestión de procesos es el comando superior. Además, la parte superior muestra una vista en tiempo real de un sistema en ejecución. Hay otras herramientas que podrían usarse para el mismo propósito, como htop, pero me he conformado con top porque está instalado de fábrica en cualquier distribución de Linux.

Para comenzar desde arriba, simplemente escriba el siguiente comando en su línea de comando y presione Enter.

# top

Examinemos un resultado superior típico:

En las filas 1 a 5 se muestra la siguiente información:

1. La hora actual (8:41:32 pm) y el tiempo de actividad (7 horas y 41 minutos). Solo un usuario ha iniciado sesión en el sistema y el promedio de carga durante los últimos 1, 5 y 15 minutos, respectivamente. 0.00, 0.01 y 0.05 indican que durante esos intervalos de tiempo, el sistema estuvo inactivo durante el 0% del tiempo (0.00: ningún proceso estaba esperando a la CPU), luego se sobrecargó en un 1% (0.01: un promedio de 0.01 procesos estaban esperando la CPU) y 5% (0.05). Si es menor que 0 y el número es menor (0,65, por ejemplo), el sistema estuvo inactivo durante el 35% durante los últimos 1, 5 o 15 minutos, dependiendo de dónde aparezca 0,65.

2. Actualmente hay 121 procesos en ejecución (puede ver la lista completa en 6). Solo 1 de ellos se está ejecutando (arriba en este caso, como puede ver en la columna% CPU) y los 120 restantes están esperando en segundo plano pero están "durmiendo" y permanecerán en ese estado hasta que los llamemos. ¿Cómo? Puede verificar esto abriendo un indicador de mysql y ejecutando un par de consultas. Notará cómo aumenta el número de procesos en ejecución.

Alternativamente, puede abrir un navegador web y navegar a cualquier página dada que esté siendo servida por Apache y obtendrá el mismo resultado. Por supuesto, estos ejemplos asumen que ambos servicios están instalados en su servidor.

3. us (tiempo de ejecución de procesos de usuario con prioridad no modificada), sy (tiempo de ejecución de procesos de kernel), ni (tiempo de ejecución de procesos de usuario con prioridad modificada), wa (tiempo de espera para la finalización de E/S), hi (tiempo dedicado a dar servicio a interrupciones de hardware), si (tiempo dedicado a dar servicio a interrupciones de software), st (tiempo robado de la máquina virtual actual por el hipervisor, solo en entornos virtualizados).

4. Uso de memoria física.

5. Intercambiar uso de espacio.

Para inspeccionar la memoria RAM y el uso de intercambio, también puede usar el comando gratis .

# free

Por supuesto, también puede usar los interruptores -m (MB) o -g (GB) para mostrar la misma información en un formato legible por humanos:

# free -m

De cualquier manera, debe tener en cuenta el hecho de que el kernel reserva la mayor cantidad de memoria posible y la pone a disposición de los procesos cuando la solicitan. En particular, la línea " -/+ búferes/caché " muestra los valores reales después de tener en cuenta esta caché de E/S.

Es decir, la cantidad de memoria utilizada por los procesos y la cantidad disponible para otros procesos (en este caso, 232 MB utilizados y 270 MB disponibles, respectivamente). Cuando los procesos necesitan esta memoria, el kernel disminuirá automáticamente el tamaño de la caché de E/S.

Lea también : 10 útiles comandos "gratuitos" para comprobar el uso de la memoria de Linux

Observando más de cerca los procesos

En un momento dado, hay muchos procesos ejecutándose en nuestro sistema Linux. Hay dos herramientas que usaremos para monitorear los procesos de cerca: ps y pstree .

Usando las opciones -e y -f combinadas en una ( -ef ) puede listar todos los procesos que se están ejecutando actualmente en su sistema. Puede canalizar esta salida a otras herramientas, como grep (como se explica en la Parte 1 de la serie LFCS) para reducir la salida a los procesos que desee:

# ps -ef | grep -i squid | grep -v grep

La lista de procesos anterior muestra la siguiente información:

propietario del proceso, PID, PID principal (el proceso principal), utilización del procesador, hora en que se inició el comando, tty (el? indica que es un demonio), el tiempo de CPU acumulado y el comando asociado con el proceso.

Sin embargo, tal vez no necesite toda esa información y le gustaría mostrar al propietario del proceso, el comando que lo inició, su PID y PPID, y el porcentaje de memoria que está usando actualmente, en ese orden y ordenar por uso de memoria en orden descendente (tenga en cuenta que ps por defecto está ordenado por PID).

# ps -eo user,comm,pid,ppid,%mem --sort -%mem

Donde el signo menos delante de% mem indica clasificación en orden descendente.

Si por alguna razón un proceso comienza a consumir demasiados recursos del sistema y es probable que ponga en peligro la funcionalidad general del sistema, querrá detener o pausar su ejecución pasando una de las siguientes señales usando el programa kill. Otras razones por las que consideraría hacer esto es cuando ha iniciado un proceso en primer plano pero desea pausarlo y reanudarlo en segundo plano.

Cuando la ejecución normal de un determinado proceso implica que no se enviará ningún resultado a la pantalla mientras se está ejecutando, es posible que desee iniciarlo en segundo plano (agregando un ampersand al final del comando).

process_name &

Una vez que haya comenzado a ejecutarse en primer plano, póngalo en pausa y envíelo al fondo con

Ctrl + Z
# kill -18 PID

Tenga en cuenta que cada distribución proporciona herramientas para detener/iniciar/reiniciar/recargar correctamente servicios comunes, como servicio en sistemas basados u200bu200ben SysV o systemctl en sistemas basados u200bu200ben systemd.

Si un proceso no responde a esas utilidades, puede eliminarlo por la fuerza enviándole la señal SIGKILL.

# ps -ef | grep apache
# kill -9 3821

Entonces ... ¿Qué sucedió / está sucediendo?

Cuando ha habido algún tipo de interrupción en el sistema (ya sea una interrupción del suministro eléctrico, una falla de hardware, una interrupción planificada o no planificada de un proceso o cualquier anomalía), los registros en /var/log son sus mejores amigos para determinar qué sucedió o qué podría estar causando los problemas que enfrenta.

# cd /var/log

Algunos de los elementos en /var/log son archivos de texto normales, otros son directorios y otros son archivos comprimidos de registros rotados (históricos). Querrá verificar aquellos con la palabra error en su nombre, pero inspeccionar el resto también puede ser útil.

Imagínese este escenario. Sus clientes LAN no pueden imprimir en impresoras de red. El primer paso para solucionar esta situación es ir al directorio /var/log/cups y ver qué hay allí.

Puede usar el comando tail para mostrar las últimas 10 líneas del archivo error_log, o tail -f error_log para una vista en tiempo real del registro.

# cd /var/log/cups
# ls
# tail error_log

La captura de pantalla anterior proporciona información útil para comprender qué podría estar causando su problema. Tenga en cuenta que es posible que seguir los pasos o corregir el mal funcionamiento del proceso no resuelva el problema general, pero si se acostumbra desde el principio a comprobar los registros cada vez que surge un problema (ya sea local o de red), Definitivamente estaré en el camino correcto.

Aunque las fallas de hardware pueden ser difíciles de solucionar, debe verificar el dmesg y los registros de mensajes y grep para buscar palabras relacionadas con una parte de hardware que se presume defectuosa.

La imagen siguiente se tomó de /var/log/messages después de buscar la palabra error usando el siguiente comando:

# less /var/log/messages | grep -i error

Podemos ver que tenemos un problema con dos dispositivos de almacenamiento: /dev/sdb y /dev/sdc , que a su vez causan un problema con la matriz RAID.

Conclusión

En este artículo, hemos explorado algunas de las herramientas que pueden ayudarlo a estar siempre al tanto del estado general de su sistema. Además, debe asegurarse de que su sistema operativo y los paquetes instalados estén actualizados a sus últimas versiones estables. ¡Y nunca, nunca, olvide revisar los registros! Entonces se dirigirá en la dirección correcta para encontrar la solución definitiva a cualquier problema.

No dudes en dejar tus comentarios, sugerencias o preguntas -si las tienes- utilizando el siguiente formulario.