Cuando la RAM de tu VPS se agota, el sistema operativo activa el OOM Killer (Out-Of-Memory Killer) y empieza a terminar procesos para liberar memoria, lo que puede tirar tu sitio o aplicación sin previo aviso. El primer paso es identificar qué proceso está consumiendo la memoria antes de tomar cualquier acción.
Síntomas de RAM agotada en un VPS Linux
El agotamiento de memoria no siempre produce una caída inmediata. Los síntomas más frecuentes son:
- El servidor responde muy lento o deja de responder por completo.
- Aparecen errores
500o503en el sitio web. - Los logs de Apache/Nginx muestran mensajes como "worker_connections are not enough".
- El archivo
/var/log/syslogo/var/log/messagesregistra entradasOut of memory: Kill process. - El comando
free -hmuestra disponible cercano a cero.
Confirmar el problema toma menos de un minuto con los comandos correctos.
Diagnóstico paso a paso
Ver el uso actual de memoria
free -h
La columna available (no solo free) es la que importa: indica cuánta memoria el sistema puede entregar a nuevas aplicaciones sin tocar el swap. Si está por debajo del 10% de tu RAM total, estás en zona de riesgo.
Identificar los procesos que más consumen
ps aux --sort=-%mem | head -20
Este comando lista los 20 procesos ordenados de mayor a menor consumo de memoria. La columna %MEM muestra el porcentaje del total de RAM y VSZ/RSS muestran el uso virtual y real respectivamente.
Alternativa interactiva que se actualiza en tiempo real:
top -o %MEM
Presiona M dentro de top para ordenar por uso de memoria.
Revisar el OOM Killer en los logs
grep -i "out of memory\|oom_kill" /var/log/syslog | tail -30
Si el OOM Killer ya actuó, aquí verás qué proceso fue terminado y cuánta memoria tenía. Eso te indica el historial del problema, no solo el estado actual.
Verificar el swap
swapon --show
Si no hay salida, no tienes swap configurado. Si aparece pero está al 100%, el sistema lleva tiempo usando disco como sustituto de RAM, lo que ralentiza todo dramáticamente.
Causas más comunes del agotamiento de RAM en VPS
| Causa | Señal característica | Solución rápida |
|---|---|---|
| PHP-FPM con demasiados workers | Docenas de procesos php-fpm en ps aux |
Reducir pm.max_children en el pool |
| MySQL/MariaDB con buffers grandes | mysqld ocupa 40-60% de la RAM solo |
Ajustar innodb_buffer_pool_size |
| Memory leak en aplicación | Un proceso crece con el tiempo hasta agotar la RAM | Reiniciar el proceso; revisar el código |
| Pico de tráfico inesperado | RAM normal hasta ese momento | Cache de página (Varnish, OPcache, Redis) |
| VPS sobredimensionado a la baja | RAM constantemente al 90%+ incluso en reposo | Escalar el plan del VPS |
Soluciones para recuperar y prevenir el agotamiento de RAM
1. Liberar memoria inmediatamente (medida de emergencia)
Si el servidor está respondiendo y necesitas ganar tiempo sin reiniciar, puedes liberar cachés del kernel (seguro, se vuelven a llenar solas):
sync && echo 3 > /proc/sys/vm/drop_caches
También puedes reiniciar únicamente el servicio problemático en lugar de todo el servidor:
systemctl restart php-fpm
systemctl restart mysql
2. Configurar o ampliar el swap
El swap actúa como válvula de escape. No reemplaza la RAM pero evita que el OOM Killer mate procesos en el primer pico. Para crear un archivo de swap de 2 GB:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
Ajusta también la swappiness para que el kernel prefiera RAM sobre swap:
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
3. Optimizar PHP-FPM
PHP-FPM en modo dynamic puede generar muchos workers simultáneos. Una fórmula conservadora para calcular pm.max_children:
RAM disponible para PHP ÷ Uso promedio por proceso PHP
Si tienes 1 GB para PHP y cada proceso usa ~50 MB, el límite es 20 workers. Edita /etc/php-fpm.d/www.conf:
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
4. Ajustar los buffers de MariaDB/MySQL
El parámetro más impactante es innodb_buffer_pool_size. Para un VPS de 2 GB de RAM donde la base de datos no es el único servicio, un valor seguro es 256-512 MB:
[mysqld]
innodb_buffer_pool_size = 256M
query_cache_size = 0
query_cache_type = 0
5. Activar OPcache para PHP
OPcache almacena el código PHP compilado en memoria compartida, lo que reduce el tiempo de CPU y el número de workers activos necesarios al mismo tiempo:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
Si después de optimizar la configuración el VPS sigue al límite, lo más probable es que el plan actual sea insuficiente para la carga real. Consulta las opciones de planes VPS con más recursos en México para encontrar el que se ajusta a tu proyecto.
Monitoreo proactivo para evitar sorpresas
La mejor solución es detectar el problema antes de que cause una caída:
- Instala Netdata o Munin para gráficas históricas de RAM y swap.
- Configura una alerta por email cuando la RAM disponible caiga por debajo del 15%.
- Revisa el log del OOM Killer semanalmente: si aparece, tienes un problema recurrente por resolver.
Para proyectos críticos que no pueden permitirse tiempo de inactividad, considera contratar un VPS con soporte administrado en elenlace.com, donde el equipo técnico monitorea recursos y actúa antes de que el problema llegue a los usuarios.
Conclusiones clave
- Usa
free -hyps aux --sort=-%memcomo primer diagnóstico. - Revisa los logs del OOM Killer para entender el historial del problema.
- El swap no reemplaza la RAM, pero evita caídas abruptas en picos de tráfico.
- PHP-FPM y MySQL son los mayores consumidores de RAM en la mayoría de los VPS con WordPress o apps PHP.
- OPcache y la limitación de workers de PHP-FPM son las optimizaciones con mejor relación esfuerzo/impacto.
- Si el VPS sigue al límite tras optimizar, es momento de escalar el plan.
Preguntas frecuentes
¿Es seguro ejecutar drop_caches en producción?
Sí, es seguro. El kernel solo limpia cachés de páginas, dentries e inodos que ya no necesita mantener de inmediato. Los datos de los procesos activos no se tocan. El único efecto secundario es que las operaciones de disco serán un poco más lentas durante unos minutos mientras el kernel vuelve a calentar la caché.
¿Cuánto swap debo crear en mi VPS?
Una regla práctica: si tienes 1-2 GB de RAM, crea 2 GB de swap. Si tienes 4-8 GB de RAM, con 4 GB de swap suele ser suficiente. Para VPS de producción no dependas del swap como solución permanente; úsalo como red de seguridad.
¿Puede un plugin de WordPress agotar la RAM del servidor?
Sí. Plugins con operaciones en segundo plano (backups, indexación SEO, caché mal configurada) pueden lanzar procesos PHP que se acumulan. Desactiva los plugins uno a uno con el sitio bajo carga y monitorea ps aux para identificar el culpable.
¿La RAM agotada puede dañar la base de datos?
Si el OOM Killer termina el proceso de MySQL abruptamente, puede dejar el motor InnoDB en estado inconsistente. Al reiniciar, InnoDB ejecuta automáticamente un recovery, pero en casos extremos puede corromperse algún tabla. Por eso los backups regulares son indispensables, tal como se explica en nuestra guía sobre mantenimiento de servidores VPS.
¿Prefieres que lo hagamos por ti? En El Enlace resolvemos hosting y desarrollo web profesional.
Para saber más
Otros proveedores y guías que vale la pena comparar: