LiveCommerce Blog

Tecnología, estrategia y resultados en ecommerce

Diagnóstico integral de rendimiento en Linux: script unificado para carga, memoria, I/O, procesos bloqueados y pila Apache–PHP-FPM

Script rápido para diagnosticar “congelaciones” en un servidor Linux

Este script lo construí iterando con una IA para capturar en un único snapshot el estado del servidor cuando noto que se congela. La salida la reviso yo y también se la paso a un modelo para que correlacione métricas y sugiera la causa probable con rapidez.

Objetivo

Reducir el tiempo entre síntoma y diagnóstico reuniendo en una sola ejecución carga, memoria, disco, I/O, procesos bloqueados, saturación de PHP-FPM/Apache, conexiones TCP y últimos errores de Apache.

Script

echo -e "\033[1;36m=== CARGA Y UPTIME ===\033[0m" && uptime && \
echo "" && echo -e "\033[1;36m=== MEMORIA ===\033[0m" && free -h && \
echo "" && echo -e "\033[1;36m=== DISCO ===\033[0m" && df -h / && \
echo "" && echo -e "\033[1;36m=== I/O DISCO (utilización %) ===\033[0m" && iostat -x 1 1 | grep -E "Device|loop0|dm-0" && \
echo "" && echo -e "\033[1;36m=== PROCESOS BLOQUEADOS (estado D) ===\033[0m" && ps aux | awk '$8 ~ /D/ {print $2, $8, $11, $10}' | head -20 && \
echo "" && echo -e "\033[1;36m=== CANTIDAD PROCESOS BLOQUEADOS ===\033[0m" && ps aux | awk '$8 ~ /D/' | wc -l && echo "procesos en estado D" && \
echo "" && echo -e "\033[1;36m=== TOP 10 PROCESOS POR CPU ===\033[0m" && ps aux --sort=-%cpu | head -11 && \
echo "" && echo -e "\033[1;36m=== TOP 10 PROCESOS POR MEMORIA ===\033[0m" && ps aux --sort=-%mem | head -11 && \
echo "" && echo -e "\033[1;36m=== PHP-FPM (total y bloqueados) ===\033[0m" && echo "Total PHP-FPM: $(ps aux | grep php-fpm | grep -v grep | wc -l)" && echo "Bloqueados: $(ps aux | grep php-fpm | awk '$8 ~ /D/' | wc -l)" && ps aux | grep php-fpm | grep -v grep && \
echo "" && echo -e "\033[1;36m=== APACHE ===\033[0m" && echo "Total Apache: $(ps aux | grep apache2 | grep -v grep | wc -l)" && \
echo "" && echo -e "\033[1;36m=== PROCESOS FIND ===\033[0m" && ps aux | grep find | grep -v grep && \
echo "" && echo -e "\033[1;36m=== CONEXIONES TCP ===\033[0m" && ss -s && \
echo "" && echo -e "\033[1;36m=== LOGS APACHE (últimos errores) ===\033[0m" && tail -5 /var/log/apache2/error.log 2>/dev/null || echo "No se puede leer error.log" && \
echo "" && echo -e "\033[1;36m=== SCRIPT LIMPIEZA ===\033[0m" && ps aux | grep cleanup | grep -v grep || echo "No hay script de limpieza ejecutándose" && \
echo "" && echo -e "\033[1;36m=== PROGRESO LIMPIEZA (últimas 10 líneas) ===\033[0m" && tail -10 /root/cleanup_progress.log 2>/dev/null || echo "No existe log de limpieza"

Cómo interpretar rápido un “congelamiento”

  • I/O saturado : procesos en estado D, iostat con %util alto y await elevado.
  • PHP-FPM saturado : muchos workers, CPU alta en php-fpm o backlog de peticiones.
  • Presión de memoria : swap activa y crecimiento de procesos, latencia extrema por swapping.
  • Tormenta de conexiones : ss -s con muchas conexiones y degradación general.

El valor del snapshot es la correlación: varias señales alineadas suelen apuntar al mismo cuello de botella y permiten priorizar la acción correctiva.

Compártelo:

¿Tienes alguna consulta?

Si tienes alguna pregunta o sabes la respuesta sobre algún comentario, no dudes en contribuir.
Responderemos rápidamente.
Puedes utilizar etiquetas BBCode para escribir negrita, enlaces, imágenes, etc...
Más información en la página oficial de BBCOde http://www.bbcode.org/ Ejemplo:
[url=http://google.com]links[/url], [color=red]colores[/color] [b]negrita[/b]...

¿Has visto los videos en nuestro canal de Youtube?

En nuestro canal de Youtube publicamos periódicamente mejoras y funcionalidades del software de ecommerce .