Entender el uso de memoria en Linux
El sistema de gestion de memoria de Linux es diferente al de Windows y puede parecer que usa casi toda la RAM disponible incluso cuando el servidor no esta bajo carga. Esto es normal: Linux usa agresivamente la RAM disponible para cache del sistema de archivos (buff/cache), lo que acelera las operaciones de lectura. La metrica importante no es la memoria "usada" sino la memoria "disponible" (available), que indica cuanta RAM puede usar una nueva aplicacion considerando que parte del cache puede liberarse si es necesario.
# Ver el uso de memoria free -h # total usada libre compartida buff/cache disponible # Mem: 4.0G 2.1G 200M 50M 1.7G 1.8G # La columna "disponible" (1.8G) es la que realmente importa # Ver los 10 procesos que mas RAM consumen ps aux --sort=-%mem | head -11
Causas del uso excesivo de RAM en servidores web
| Causa | Proceso responsable | Solucion |
|---|---|---|
| Demasiados workers de Apache/Nginx | apache2, httpd, nginx | Reducir MaxRequestWorkers en Apache o worker_processes en Nginx |
| Buffer pool de MySQL demasiado grande | mysqld | Reducir innodb_buffer_pool_size en my.cnf |
| PHP-FPM con demasiados workers | php-fpm | Reducir pm.max_children en el pool de PHP-FPM |
| Redis con demasiada memoria asignada | redis-server | Reducir maxmemory en redis.conf |
| Memoria PHP alta por plugin o proceso | php | Identificar el plugin con Query Monitor y optimizar |
| Sin swap configurado | Sistema | Configurar un archivo de swap como respaldo |
Calcular la RAM necesaria por tipo de servidor
Una formula aproximada para calcular la RAM necesaria para un servidor web es:
RAM_necesaria = (workers_Apache x RAM_por_worker)
+ (innodb_buffer_pool_size de MySQL)
+ (workers_PHP-FPM x RAM_por_worker_PHP)
+ SO y otros servicios (~512MB)
# Ejemplo: Servidor con Apache prefork
# 10 workers x 50MB + 512MB MySQL + 10 PHP-FPM x 30MB + 512MB OS
# = 500 + 512 + 300 + 512 = 1824 MB minimo para operar sin swapReducir el uso de RAM en WordPress
- Activar el cache de paginas para reducir el numero de procesos PHP activos simultaneamente.
- Desactivar plugins que ejecutan procesos en segundo plano innecesariamente.
- Usar PHP-FPM con la configuracion
pm = ondemandpara que los workers se creen solo cuando hay solicitudes, en lugar de mantener workers idle consumiendo RAM. - Configurar un limite de memoria por cuenta en CloudLinux para evitar que un sitio consuma toda la RAM del servidor.
