Uso del sistema, utilización y resolución de problemas

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

En capítulos anteriores has aprendido a monitorizar procesos (Capítulo 14), gestionar servicios (Capítulo 7), configurar redes (Capítulos 29 y 32) y trabajar con almacenamiento (Capítulos 4, 11, 26).

27.1. Introducción

Este nuevo capítulo unifica todas esas habilidades para que puedas evaluar el estado global de un sistema Linux, identificar cuellos de botella, analizar patrones de uso y aplicar un método sistemático de resolución de problemas.

Un administrador eficaz no solo reacciona ante fallos, sino que previene mediante la observación constante y el análisis de tendencias. Aquí verás herramientas integradas y metodologías para:

  • Obtener una visión completa del sistema (CPU, memoria, E/S, red, procesos, logs).
  • Detectar anomalías y correlacionar eventos.
  • Aplicar un enfoque estructurado de diagnóstico y solución.
  • Documentar y aprender de los incidentes.

Este capítulo es eminentemente práctico y se apoya en todo lo anterior; te servirá tanto para el examen LFCS como para tu día a día profesional.

27.2. Visión global del sistema

27.2.1. Primer vistazo con uptime, w, who y last

Antes de profundizar, conviene saber cuánto tiempo lleva encendido el sistema, cuántos usuarios hay conectados y la carga media.

uptime
# 14:23:45 up 10 days,  3:15,  2 users,  load average: 0.18, 0.25, 0.30
  • Load average: promedio de procesos en cola de ejecución (o esperando E/S) en los últimos 1, 5 y 15 minutos. Un valor superior al número de CPUs lógicas indica sobrecarga.

  • w muestra quién está conectado y qué está ejecutando.

  • who lista sesiones activas.

  • last muestra últimos inicios de sesión y reinicios.

27.2.2. Estado general con top o htop

Ya vistos en el Capítulo 14, pero aquí los usamos como punto de partida. top interactivo ofrece:

  • Resumen de CPU, memoria, swap.
  • Lista de procesos ordenados por consumo.
  • Comandos para matar, renicear, filtrar.

El comando htop (si está instalado) es más amigable y permite navegar con el ratón. Recomendado para diagnóstico rápido.

27.2.3. Memoria y swap con free

free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       4.2Gi       6.1Gi       123Mi       5.0Gi        10Gi
Swap:         2.0Gi       0.0Gi       2.0Gi
  • available es la cifra clave: cuánta memoria queda realmente para nuevas aplicaciones (incluye caché liberable).
  • Un uso elevado de swap con mucha memoria disponible indica un ajuste de vm.swappiness inadecuado.

27.2.4. E/S con iostat, vmstat y iotop

  • iostat -xz 1 muestra utilización de discos, tiempos de espera y saturación.
  • vmstat 1 combina CPU, memoria y E/S.
  • iotop (requiere root) muestra E/S por proceso en tiempo real, como top para discos.

27.2.5. Red con ss, sar -n y iftop

  • ss -tulnp para ver sockets y procesos.
  • sar -n DEV 1 para tasas de transferencia por interfaz.
  • iftop para conexiones en vivo.

27.3. Análisis de procesos y recursos

27.3.1. Procesos que más consumen

Ya conoces ps y top, pero para reportes rápidos:

ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head

También se puede usar pidstat:

pidstat -u 1 5   # CPU por proceso
pidstat -r 1 5   # memoria
pidstat -d 1 5   # E/S

27.3.2. Estados de procesos y zombies

Un proceso en estado Z (zombie) ha terminado pero su padre no ha leído su estado de salida. No consume recursos, pero muchos zombies indican un bug.

ps -eo stat,pid,comm | grep Z

Para eliminarlos, hay que finalizar al proceso padre o hacer que lea el estado (SIGCHLD).

27.3.3. Archivos abiertos y límites

  • lsof -p PID lista archivos abiertos por un proceso.
  • lsof +D /ruta muestra qué procesos usan un directorio (útil para saber por qué no se puede desmontar).
  • cat /proc/PID/limits muestra los límites de recursos (archivos abiertos, memoria, etc.).

Si un proceso falla con “too many open files”, se debe aumentar el límite con ulimit -n (temporal) o en /etc/security/limits.conf (persistente), además del valor global fs.file-max.

27.4. Diagnóstico de cuellos de botella

27.4.1. CPU saturada

Síntomas: load average alta, %us o %sy cercanos al 100%, procesos lentos.

Herramientas: top, mpstat -P ALL, pidstat -u.

Causas y soluciones:

  • Proceso legítimo consumiendo demasiado: renicear o investigar.
  • Proceso zombi o mal programado: reiniciar servicio, aplicar parche.
  • Interrupciones o kernel: revisar %hi/%si en top, actualizar drivers.

27.4.2. Memoria insuficiente

Síntomas: uso de swap, páginas de memoria liberadas con frecuencia (si/so en vmstat), OOM killer activándose.

Herramientas: free -h, vmstat 1, sar -r, dmesg | grep -i oom.

Soluciones: añadir memoria, reducir caché de aplicaciones, ajustar vm.swappiness, limitar memoria con cgroups.

27.4.3. E/S de disco lenta

Síntomas: %iowait alto, procesos en estado D (espera de E/S), colas de disco (avgqu-sz) elevadas.

Herramientas: iostat -xz, iotop, pidstat -d, sar -d.

Soluciones: mover datos a discos más rápidos, distribuir carga, usar RAID, optimizar aplicaciones (índices en BD), revisar dirty_ratio.

27.4.4. Red saturada o con errores

Síntomas: pérdida de paquetes, latencia alta, rx/tx al límite.

Herramientas: ping, mtr, iperf3, sar -n DEV, ethtool -S, tcpdump.

Soluciones: aumentar ancho de banda, balancear tráfico, revisar cables/switch, ajustar buffers (net.core.rmem_max), calidad de servicio.

27.5. Resolución sistemática de problemas

27.5.1. Metodología de 6 pasos

  1. Identificar el problema: ¿qué falla exactamente? ¿desde cuándo?
  2. Recopilar información: logs, estado de servicios, configuración, monitorización.
  3. Formular hipótesis: posibles causas basadas en la evidencia.
  4. Probar hipótesis: cambiar una variable a la vez, usar entornos de prueba si es posible.
  5. Aplicar la solución: implementar de forma controlada y documentada.
  6. Verificar y prevenir: comprobar que se resuelve y establecer medidas para que no se repita.

27.5.2. Fuentes de información clave

  • Logs del sistema:
    • /var/log/syslog o /var/log/messages
    • /var/log/auth.log o /var/log/secure
    • journalctl -u <servicio> -b
  • Estado de servicios: systemctl status, systemctl list-units --failed
  • Cambios recientes: historial de paquetes (yum history, apt history), archivos modificados (find /etc -mtime -1)
  • Red: configuración, rutas, sockets, capturas.

27.5.3. Uso de logs para diagnóstico

journalctl es la herramienta central en systemd:

journalctl -xe                  # últimas entradas con explicación
journalctl -u sshd --since "1 hour ago"
journalctl -b -1                # logs del arranque anterior
journalctl -p err               # solo errores

Los logs tradicionales se pueden examinar con tail -f, grep, awk, y logrotate los gestiona.

27.5.4. Herramientas de depuración avanzada

  • strace -p PID : rastrea llamadas al sistema de un proceso en vivo.
  • ltrace : similar para bibliotecas.
  • gdb : depurador para binarios.
  • perf top : perfilado de rendimiento del kernel y aplicaciones.
  • tcpdump / tshark : análisis de red.

27.6. Optimización y ajuste proactivo

27.6.1. Ajustes de sysctl relevantes

Ya vistos en el Capítulo 15, recordamos los más útiles:

  • vm.swappiness
  • vm.vfs_cache_pressure
  • vm.dirty_ratio, vm.dirty_background_ratio
  • net.core.somaxconn, net.ipv4.tcp_tw_reuse
  • fs.file-max

27.6.2. Límites de recursos con systemd

Se pueden limitar recursos por servicio en el archivo de unidad:

[Service]
MemoryLimit=512M
CPUQuota=200%

O usar systemctl set-property servicio MemoryMax=1G.

27.6.3. Programación de tareas de mantenimiento

  • logrotate para rotar y comprimir logs.
  • tmpwatch o systemd-tmpfiles para limpiar temporales.
  • cron o systemd-timers para tareas periódicas (backups, actualizaciones, informes).

27.7. Ejercicios prácticos

  1. Diagnóstico general: ejecuta uptime, free -h, vmstat 1 5, iostat -xz 1 5 y ss -tuln. Anota valores normales y posibles anomalías.

  2. Proceso problemático: lanza un proceso que consuma CPU (ej. yes > /dev/null &). Localízalo con top, ps, pidstat. Cambia su prioridad con renice y observa el efecto. Mátalo.

  3. Simular saturación de memoria: usa stress-ng --vm 2 --vm-bytes 1G --timeout 60 (instálalo si es necesario). Observa con free, vmstat y dmesg | grep -i oom. Experimenta con vm.swappiness.

  4. Archivos abiertos: abre un archivo con tail -f y trata de desmontar el sistema de archivos que lo contiene. Usa lsof para identificar el proceso y soluciona.

  5. Análisis de logs: genera un error en un servicio (detén SSH, intenta conectar). Busca en journalctl y en logs tradicionales. Corrige y verifica.

  6. Cuello de botella de red: con iperf3 entre dos equipos, mide el ancho de banda. Limita la velocidad en un extremo (si puedes) y vuelve a medir.

27.8. Resumen y consejos para LFCS

  • La monitorización y el diagnóstico son habilidades transversales: aparecen en casi todos los dominios del examen.
  • Acostúmbrate a usar journalctl, systemctl status, top, free, iostat, vmstat y ss de forma natural.
  • La resolución de problemas es un proceso metódico: no adivines, investiga.
  • Documenta los incidentes y las soluciones; te servirá para el futuro y para tus compañeros.
  • En el examen, mantén la calma y utiliza el flujo: verificar servicio, logs, recursos, configuración, red.
Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio