
Estoy tratando de descubrir por qué mis procesos de Apache están consumiendo tanta memoria.
Mis especificaciones de segmento (1,5 GB de RAM, CentOS 5, Apache2, PHP 5.2, MySQL)
Como puede ver, mis procesos principales consumen casi la mitad de toda mi memoria y cuando se generan más procesos, el servidor casi se detiene, con frecuencia pasa al intercambio y falla.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
¿Alguien tiene alguna idea de qué podría estar causando que Apache (y PHP) consuman tanta memoria?
total used free shared buffers cached
Mem: 1545 827 718 0 3 111
-/+ buffers/cache: 713 832
Swap: 3071 103 2968
Respuesta1
Es casi seguro que estás ejecutando mod_php, lo que significa que es casi seguro que estás ejecutando apache en mpm_prefork.
Si el rendimiento en general es bueno hasta que la carga hace que comience a intercambiar, una solución rápida es comenzar a reducir los MaxClients de Apache. Si a Apache se le permite bifurcar procesos de trabajo cuando lo desee, comenzará a intercambiarse bajo carga. Las solicitudes se pondrán en cola hasta que haya un trabajador disponible, por lo que las cosas pueden volverse lentas, pero no tanto como la muerte por intercambio.
Si realmente necesita ajustar las cosas más, considere alejarse del apache mpm previo a la bifurcación. Eso significa ejecutar PHP como FastCGI. Si va a utilizar PHP bajo FastCGI, debería considerar actualizar a PHP 5.3.3, que tiene un administrador de procesos FastCGI mucho mejor (opción de configuración --enable-fpm).
php-fpm/worker es mucho más eficiente en memoria que el antiguo mod_php. Luego puede ajustar la cantidad de procesos/subprocesos de Apache independientemente de la cantidad de procesos PHP. Y sus procesos PHP con mucha memoria solo se utilizan para ofrecer contenido basado en PHP y no se desperdician en servir archivos estáticos.
Respuesta2
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
¿Wordpress es lo único que se ejecuta en Apache? Tengo curiosidad sobre todo por el alto uso de CPU del PID 6765 allí. Me pregunto qué está haciendo. En lo que respecta a los mem%s, parece bastante normal para la configuración de una aplicación web, ya que cada subproceso en realidad ejecuta más de un trabajador.
¿Qué MPM estás usando para Apache y cómo lo configuras?
Además, si publica volcados de terminales, comience cada línea con cuatro espacios. Permite conservar el formato.
Respuesta3
Mi bola de cristal tiene un poco de polvo, pero supongo que la estás usando.memcachedy su extensión PHP. Si ese es el caso, intenta desactivarlo a menos que realmente lo necesites.
Otra posibilidad es que tenga algún tipo de caché de código de operación, comoXcaché, lo instalé y lo configuré para usar mucha memoria.
Puedes intentarlo
pmap -x `pidof apache`
para ver qué está consumiendo la memoria.
Respuesta4
No cargue módulos de Apache no utilizados (como Python, Perl, etc.).
Utilice el módulo php eAccelerator. Es un compilador de php. Puede obtener una ejecución más rápida y un menor uso de memoria.
Quizás otros usuarios también tengan razón.