Tengo un par de servidores que alojan un solo sitio de comercio electrónico de Magento con tráfico moderado (60,000 páginas vistas por día reportadas por Google Analytics, creo que 80,000 reportadas en el servidor). El servidor de la base de datos funciona sin problemas y rápidamente, aparte de un raro inconveniente ocasional, pero el servidor Apache se ha estado cayendo de vez en cuando.
He configurado magento para usar el almacenamiento en caché PHP recomendado (APC), así como mantener sus propios archivos de caché en un tmpfs de 1.5 gig (este tmpfs regularmente se llena bastante, y tengo un script ejecutándose para borrar los archivos de caché cuando el tmpfs es más del 80% lleno). Sirvo la mayoría de las imágenes de Amazon Cloudfront. Recientemente configuré nginx como proxy inverso de apache (nginx también sirve los archivos estáticos). He configurado Apache lo mejor que he podido: keepalives y hostnamelookups están apagados, y el prefork está configurado de la siguiente manera:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
No he desactivado los archivos .htaccess, y el registro de acceso está activado. Sé que hay algunos módulos que puedo desactivar. No estoy seguro de qué efecto tendría alguno de esos tres cambios, si lo hubiera.
El servidor apache es un VPS con 6 gig de RAM. Al momento de escribir esto, el servidor está informando load average: 17.77, 18.27, 49.76
, pero hay aproximadamente 2 gig de RAM libre. Cuando se pone realmente mal, la carga se eleva a más de 120 y permanece allí: al reiniciar Apache, el sitio vuelve a funcionar y la carga vuelve a caer.
vmstat
es (mientras el servidor informa la carga anterior), creo que muestra un valor inactivo de la CPU que fluctúa entre 0 y 70 más o menos. iostat
muestra un valor de iowait entre 0 y 0.2%.
Estoy un poco atascado. Lo poco que sé es que me dice que el problema es que la CPU está sobrecargada como resultado de la combinación del código que se está ejecutando y la cantidad de usuarios. Pero no tengo suficiente experiencia para estar seguro de que ese es el problema. Si ese es el problema, creo que las soluciones son mejorar el código o dividir el alojamiento del sitio en dos VPS con un equilibrador de carga.
Entonces, supongo que mis preguntas son:
- ¿Qué más puedo hacer para encontrar problemas o cuellos de botella en el servidor?
- ¿Hay algún cambio obvio que pueda hacer en la configuración del servidor para mejorar esto?
- ¿Es una buena idea configurar un sistema automatizado para reiniciar Apache cuando la carga supera un cierto nivel?
- De lo anterior, ¿qué tan probable es que el sitio haya superado al servidor?
Editar:
Encontré algo extraño: / var / spool / mail / root era grande ... 38 conciertos. Eso suena ... poco saludable. ¿Podría ser el problema?