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

CausaProceso responsableSolucion
Demasiados workers de Apache/Nginxapache2, httpd, nginxReducir MaxRequestWorkers en Apache o worker_processes en Nginx
Buffer pool de MySQL demasiado grandemysqldReducir innodb_buffer_pool_size en my.cnf
PHP-FPM con demasiados workersphp-fpmReducir pm.max_children en el pool de PHP-FPM
Redis con demasiada memoria asignadaredis-serverReducir maxmemory en redis.conf
Memoria PHP alta por plugin o procesophpIdentificar el plugin con Query Monitor y optimizar
Sin swap configuradoSistemaConfigurar 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 swap

Reducir 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 = ondemand para 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.
Was this answer helpful? 0 Users Found This Useful (0 Votes)