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:
- Prueba de ejecución local CLI:Bash
php /ruta/al/sitio/checkup.phpSi imprime el código HTML/PHP, el motor PHP y MariaDB funcionan. - Reiniciar los sockets de PHP-FPM y Apache:
Bashsudo systemctl restart php8.4-fpm sudo systemctl restart apache2 - 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:
- Editar el archivo de pool de FPM:Bash
sudo nano /etc/php/8.4/fpm/pool.d/www.conf - Ajustar las siguientes directivas:Ini, TOML
pm = dynamic pm.max_children = 35 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 15 pm.max_requests = 500 - Validar la sintaxis de la configuración:Bash
sudo php-fpm8.4 -t - Recargar el servicio:Bash
sudo 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:
- Editar la configuración de MariaDB:Bash
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf - 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 - Reiniciar el servicio de base de datos:Bash
sudo systemctl restart mariadb