Saltar al contenido

Manual de emergencia: Recuperación del Servidor Web

Paso 1: Matar todos los procesos colgados a la fuerza

Cuando el servidor se satura, los procesos de Apache y PHP quedan bloqueados esperando respuestas de MariaDB. Para liberar la memoria RAM y los puertos de forma inmediata, detén los procesos colgados:

# 1. Detener el servicio de Apache
sudo systemctl stop apache2

# 2. Forzar el cierre de todos los procesos de Apache y PHP en memoria
sudo killall -9 apache2
sudo killall -9 php-fpm php 2>/dev/null

Nota: Si MariaDB se quedó con consultas «zombies» congeladas, puedes reiniciar el motor de base de datos de manera limpia:

sudo systemctl restart mariadb

Paso 2: Iniciar Apache limpiamente

Una vez liberados todos los recursos en memoria, inicia el servicio de Apache desde cero:

# Iniciar el servicio web
sudo systemctl start apache2

# Verificar que el servicio esté activo y en ejecución (active/running)
sudo systemctl status apache2

Paso 3: Probar la conectividad local (127.0.0.1)

Verifica que el servidor esté respondiendo peticiones locales antes de probar la web pública. Esto descarta problemas con Apache antes de culpar a la red o al DNS:

curl -I http://127.0.0.1/

Respuesta esperada: Debes recibir un encabezado HTTP exitoso parecido a esto:

HTTP/1.1 200 OK
Date: ...
Server: Apache/2.4.X (Debian)
Content-Type: text/html; charset=UTF-8

Protocolo de Diagnóstico Rápido (En caso de Caídas)

Si en el futuro el sitio web vuelve a dejar de responder, sigue esta secuencia de verificación en terminal:

  1. Prueba de ejecución local CLI:Bashphp /ruta/al/sitio/checkup.php Si imprime el código HTML/PHP, el motor PHP y MariaDB funcionan.
  2. Reiniciar los sockets de PHP-FPM y Apache:
    Bashsudo systemctl restart php8.4-fpm sudo systemctl restart apache2
  3. Verificar estado de los procesos:
    Bashsystemctl status php8.4-fpm

Optimización de PHP-FPM para Servidores con >16 GB RAM

La configuración por defecto de Debian limita a PHP a solo 5 procesos simultáneos (pm.max_children = 5), lo cual genera cuellos de botella y congelamientos en sitios con tráfico o tableros pesados.

Pasos:

  1. Editar el archivo de pool de FPM:Bashsudo nano /etc/php/8.4/fpm/pool.d/www.conf
  2. Ajustar las siguientes directivas:Ini, TOMLpm = dynamic pm.max_children = 35 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 15 pm.max_requests = 500
  3. Validar la sintaxis de la configuración:Bashsudo php-fpm8.4 -t
  4. Recargar el servicio:Bashsudo systemctl reload php8.4-fpm

4. Ajustes Básicos de MariaDB (Protección contra Consultas Colgadas), opcional pues no fue probado en el servidor.

Para evitar que consultas SQL maliciosas o bucles infinitos con la función SLEEP consuman todas las conexiones de la base de datos:

  1. Editar la configuración de MariaDB:Bashsudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
  2. Añadir el límite de tiempo dentro del bloque [mysqld]:Ini, TOML[mysqld] # Cancela consultas individuales que superen los 60 segundos max_statement_time = 60
  3. Reiniciar el servicio de base de datos:Bashsudo systemctl restart mariadb
Publicado enManuales