Búsqueda de sitios web

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


Aunque Linux es muy confiable, los administradores de sistemas inteligentes deberían encontrar una manera de vigilar el comportamiento y la utilización del sistema en todo momento. Garantizar un tiempo de actividad lo más cercano posible al 100 % y la disponibilidad de recursos son necesidades críticas en muchos entornos. Examinar el estado pasado y actual 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 continuos. 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 bien 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 utiliza normalmente para informar el uso general del espacio en disco por sistema de archivos.

Ejemplo 1: informar el uso del espacio en disco en bytes y en formato legible por humanos

Sin opciones, df informa el uso de espacio en disco en bytes. Con el indicador -h, mostrará la misma información usando MB o GB. 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.

Ejemplo 2: Inspeccionar el uso de inodos por sistema de archivos en formato legible por humanos con
df -hTi

puedes ver la cantidad de inodos usados y disponibles:

Según la imagen de arriba, hay 146 inodos usados (1%) en /home, lo que significa que aún puedes crear archivos de 226 KB en ese sistema de archivos.

Ejemplo 3: buscar y/o eliminar archivos y directorios vacíos

Tenga en cuenta que puede quedarse sin espacio de almacenamiento mucho antes de quedarse sin inodos, y viceversa. Por esa razón, debe monitorear no solo la utilización del espacio de almacenamiento sino también la cantidad de inodos utilizados por el sistema de archivos.

Utilice los siguientes comandos para buscar archivos o directorios vacíos (que ocupan 0B) que utilizan inodos sin ningún motivo:

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

Además, puede agregar el indicador -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. Comprobemos nuevamente la cantidad de nodos usados/disponibles nuevamente en /home:

df -hTi | grep home

Como puede ver, ahora se utilizan 142 inodos (4 menos que antes).

Ejemplo 4: examinar el uso del disco por directorio

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

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

du -sch /var/*

Nota: Puede cambiar a cualquiera de los subdirectorios anteriores para saber exactamente qué hay en ellos y cuánto ocupa cada elemento. Luego puede usar 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 comandos “df” útiles para comprobar el espacio en disco
  2. Diez comandos “du” útiles para encontrar el uso de archivos y directorios en disco

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 la 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 se instala de fábrica en cualquier distribución de Linux.

Ejemplo 5: Mostrar un estado en vivo de su sistema con la parte superior

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 la carga es promedio 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: no había procesos 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 menor es el número (0,65, por ejemplo), el sistema estuvo inactivo durante un 35 % durante los últimos 1, 5 o 15 minutos, dependiendo de dónde aparezca 0,65.

2. Actualmente hay 121 procesos en ejecución (puedes ver el listado completo en 6). Solo 1 de ellos se está ejecutando (el superior 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ás cómo aumenta el número de procesos en ejecución.

Alternativamente, puede abrir un navegador web y navegar a cualquier página proporcionada por Apache y obtendrá el mismo resultado. Por supuesto, estos ejemplos suponen 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 que se complete la E/S), hi (tiempo dedicado a atender interrupciones de hardware), si (tiempo dedicado a atender 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.

Ejemplo 6: inspeccionar el uso de la memoria física

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

free

Por supuesto, también puede utilizar los modificadores -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 tanta memoria como sea posible y la pone a disposición de los procesos cuando la solicitan. En particular, la línea “-/+ buffers/cache” muestra los valores reales después de tener en cuenta este caché de E/S.

En otras palabras, 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 reducirá automáticamente el tamaño de la caché de E/S.

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

Una mirada más cercana a los procesos

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

Ejemplo 7: Mostrar toda la lista de procesos en su sistema con ps (formato estándar completo)

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

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.

Ejemplo 8: personalizar y ordenar la salida de ps

Sin embargo, tal vez no necesite toda esa información y le gustaría mostrar el 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 de forma predeterminada 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 pasándole una de las siguientes señales utilizando el programa de eliminación. 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.

Signal name Signal number Description
 SIGTERM 15  Kill the process gracefully.
 SIGINT 2  This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it.
 SIGKILL 9  This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it.
 SIGHUP 1  Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process.
 SIGTSTP 20  Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination.
 SIGSTOP 19  The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted.
 SIGCONT 18  This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands.
Ejemplo 9: pausar la ejecución de un proceso en ejecución y reanudarla 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 signo comercial al final del comando).

process_name &

o,
Una vez que haya comenzado a ejecutarse en primer plano, pausarlo y enviarlo a segundo plano con

Ctrl + Z
kill -18 PID

Ejemplo 10: Matar por la fuerza un proceso “enloquecido”

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

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

ps -ef | grep apache
kill -9 3821

Entonces... ¿Qué pasó/está pasando?

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

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á comprobar aquellos que tengan la palabra error en su nombre, pero inspeccionar el resto también puede resultar útil.

Ejemplo 11: Examinar registros en busca de errores en procesos

Imagínese este escenario. Sus clientes de 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 utilizar 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 seguir los pasos o corregir el mal funcionamiento del proceso aún no resolverá el problema general, pero si se acostumbra desde el principio a verificar los registros cada vez que surge un problema (ya sea local o de red), podrá Definitivamente estaré en el camino correcto.

Ejemplo 12: examinar los registros en busca de fallas de hardware

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 pieza de hardware que se presume defectuosa.

La siguiente imagen está tomada 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 ayudarle 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, jamás, olvides revisar los registros! Entonces irás en la dirección correcta para encontrar la solución definitiva a cualquier problema.

No dude en dejar sus comentarios, sugerencias o preguntas, si tiene alguna, utilizando el formulario a continuación.