Como conseguí estabilizar Anieto2k y BlogHogwarts
Relay | abril 10, 2008Puede parecer extraño, la verdad es que llevo casi 1 mes sin actualizar por varios motivos.
Uno de ellos, el estar liado estabilizando un blog con 5000-6000 visitas diarias diferente a Anieto2k.
Fue el propio anieto2k quien me «presentó» a Alex, de AlexSEO y BlogHogwarts, siendo este último un blog de Harry Potter. Su problema era el de siempre: mucha visita y el server inestable totalmente.
Por si fuera poco, ya sabemos todos que Harry Potter tiene muchos fans, este blog está alojado en un VPS (para los no entendidos, una máquina virtual). Con 1 giga de ram y, supongo yo, unos 500-600 Mhz de procesador, sin swap alguna (cosas de la tecnología usada por ese hosting), me decidí a mirar si podía estabilizar de alguna manera ese server.
La instalación era una Ubuntu con LAMP y Ricardo Galli ya había pasado por ahí, cosa que dificultaba mi trabajo. No es que odie o ame a Ricardo, pero reconozco que a veces habla con argumento y con empírica.
Tras varios toqueteos, conseguí ponerle eAccelerator (pues estaba instalado pero no se usaba) y medio configuré unos parámetros en Apache. La cosa estaba estable casi siempre, con valores sobre 5-10 de Load Average. Esto no es un gran elogio, pero la media anterior estaba en 15. El problema era que tenía avalanchas de visitas y hacía que el load se subiera a 50 y agotaba toda la ram. Aquello era impracticable.
Decidí mover ficha con algo que tenía medio pensado para NoPuedoCreer. El objetivo era cambiar la pila de Apache+PHP por algo más manejable. Encontré Nginx, un servidor web muy muy ligero con apenas consumo de memoria creado por un ruso. Aunque la opción más lógica era usar Lighttpd, Nginx tiene como punto positivo que las reglas rewrite que suele usar la gente en Apache funcionen a la primera casi sin tener que tocar nada.
Dicho y hecho. La parte de PHP se soluciona haciendo que se procese con el sistema directamente. Y aquí es donde estriba el cambio radical y fundamental: Apache tiene un módulo que directamente ejecuta las cosas en php en el propio entorno del servidor web, haciendo que se consuma mucha más memoria.
Sin embargo, Nginx se configura para que se pasen las peticiones php al comando del sistema directamente, siendo el sistema operativo el encargado de ejecutarlo y tener control sobre memoria. Aunque algunos me tachen de loco o de ‘are you from the past’, para mejorar el entendimiento entre php y nginx se usa php en modo fastcgi (en las librerias del sistema usa la configuración de CGI).
Me configuré un script ejecutado cada vez que se arranca el sistema que se crean 7 procesos php en fastcgi a la espera que Nginx les pase algo por hacer. Dado que BlogHogwarts estaba en un VPS, tuve que poner un script en el cron que cada día haga un kill de estos procesos y los relance de nuevo (se quedaban colgados) – esto no he tenido que hacerlo con Anieto2k.
Así que simplemente copié la configuración referente a eAccelerator del Apache y lo metí en la configuración CGI de php. Acto seguido escribí las configuraciónes referentes al dominio con las reglas rewrite para Nginx, que podeis consultar en este post.
Paré el apache, y arranqué Nginx con los procesos php ya creados.
Et voilá! Resultado: como mucho, el load se pone en 5, sucediendo esto cuando se postea alguna información relevante y se linkea mucho desde diferentes sites a ese blog. Nginx casi no tiene carga, pues todo lo procesa el php con sus procesos. Generalmente el uso más notable es el de la base de datos, siendo este como máximo de un 40-50% en contadísimas ocasiones, lo normal es un 2-5%. Lleva la máquina sin caerse hace bastantes días, y el consumo de memoria es estable sin llegar a consumirse nunca el total.
En la parte del usuario, se notan 3 cosas: la velocidad en general de la web, que se carga cada página de golpe (antes apache procesaba cosas y esperaba a que los procesos php terminaran y seguía mostrando la web – ahora simplemente se procesa todo en el lado php y se muestra de golpe) y que no hay merma de rendimiento aparente.
Tras esto, decidí hacerlo en Anieto2k, sobretodo tras su puesta en escena del GeekTest, que hizo que nos tumbaran la máquina los de Microsiervos. Así que dicho y hecho, mismo proceso mismos resultados. Siendo la máquina que hostea Anieto2k, Filmclub y este mismo blog una máquina dedicada con Debian, el load rara vez pasa de 0.57 y la base de datos se mantiene entre un 20-40% por culpa de los accesos al GeekTest.
Todos estos blogs estan en wordpress 2.5, cosa que aumenta el consumo de CPU+Memoria. Pero como si no lo notara. Podemos tener avalanchas bestias y la máquina sigue respondiendo, sin perder ápice de configuración o trucos usados ya en php.
Recomiendo a todos los que tengan problemas de load, mucho tráfico y simplemente quieran algo más manejable y rápido, que usen este método.
Buen trabajo! Algún dia lo probaré. Gracias.
Shark | abril 10, 2008Buen trabajo!
Algún dia lo probaré. Gracias.
[...] Carlos (Relay) partió raudo y veloz, a solucionar el
Una caso real, mejora de rendimiento pasando de Apache | aNieto2K | abril 10, 2008[…] Carlos (Relay) partió raudo y veloz, a solucionar el problema como solo él es capaz de hacerlo. Nos comenta en su blog como solucionó el problema y como me dejó boquiabierto al ver el resultado …. Realmente […]
Gracias Carlos!
Alejandro Martínez | abril 10, 2008Gracias Carlos!
Muy interesante el tema. En mi empresa tenemos bastantes problemas
Diego | abril 10, 2008Muy interesante el tema. En mi empresa tenemos bastantes problemas de rendimiento con el Apache 2 y la base de datos porque hay unas 60 personas tirando continuamente de una aplicación en PHP obsoleta (hay archivos en PHP de 40000 líneas de código. Sí, ¡¡40000!!) y de MySQL así que mañana probaré en mi máquina este servidor web y a ver si consigo hacerlo funcionar en el servidor grande. El problema es que es una RedHat 4 (no me gusta nada RedHat) y no estoy muy puesto… prefiero Ubuntu/Debian. A ver qué tal se me da.
Muy bueno el análisis, hechaste mano de cuanto cosa encontraste,
Angelfire | abril 11, 2008Muy bueno el análisis, hechaste mano de cuanto cosa encontraste, felicidades hombre, se ve que eres todo un guru 😉
Buena solución, pero no estaría de más recordar a todos
Borja | abril 11, 2008Buena solución, pero no estaría de más recordar a todos los optimizadores intrépidos que en entornos con suficiente RAM apache+mod_php ofrece mejores resultados y mayor tolerancia a errores.
Por otra parte … ¿por qué no has probado APC? a mi siempre me ha dado mejores resultados que eAccelerator aunque no sea muy grande la diferencia, ¡todo cuenta!
[...] Como conseguí estabilizar Anieto2k y BlogHogwarts. vía: Para colores,
Enlaces de Programación 1 - Carrero Bitácora de los Hermanos Carrero, David Carrero Fernández-Baillo y Jaime Carrero Fernández-Baillo. | abril 11, 2008[…] Como conseguí estabilizar Anieto2k y BlogHogwarts. vía: Para colores, 32 bits […]
Genial no me atrevía a usar otros servidores http por
Ivan de la Jara | abril 11, 2008Genial no me atrevía a usar otros servidores http por el problema del rewrite y sabiendo esto, probablemente me «arriesgue» cuando sea necesario 😉
Gracias!
Hoy mismo empezaré a probar el sistema. Tengo una web
David | abril 11, 2008Hoy mismo empezaré a probar el sistema.
Tengo una web con mucho tráfico, hosteada en un dedicado con apache2 y mysql5 y la verdad es que a veces el rendimiento cae a los abismos del infierno.
Primero lo instalaré en una máquina de prueba y si todo ok, lo miraré de subir en real.
Ya iré contándoos.
Gracias a todos por los comentarios (pensaba que nadie me
Relay | abril 11, 2008Gracias a todos por los comentarios (pensaba que nadie me leia 😀 )
Voy a ir contestando a todos los que me hacen preguntillas.
Para Borja: hombre, entiendo lo que dices en la parte de tener RAM, pero hoy en día me parece un poco exagerado que una máquina con un Intel Core Duo 6600 a 2’4 Ghz con 2 GB de RAM, 2 GB de Swap no aguante durante más de una semana visitas con 4 blogs; siendo el que más consume Anieto2k. Hay que entender que Apache es algo anticuado, que funciona en el 100% de los casos porque fue uno de los primeros servidores web y que la gente se volcó en su desarrollo.
Evidentemente, tengo otros servidores con apache montado sin dar problema. Depende del tráfico que genere y de lo que tenga que procesar.
Referente a APC, pues había oido hablar de él, pero ya había usado eAccelerator otras veces. Lo usaré si tengo algún que otro problema. Gracias por la recomendación.
Para Diego: lo mejor es que dediqueis algún recurso a revisar la documentación (que dudo que exista) y a mejorar partes de esos php (basta con dividir las cosas, si hay cookies por en medio, o hacer pasos intermedios). Posiblemente la programación no sea buena, lo digo porque un php de 40.000 lineas por lo menos tiene que controlar la cafetera de la empresa y la fotocopiadora (una pequeña broma). Si os da pereza, readaptar algun sistema php open-source de los que hay por ahí os será más util (si podeis).
En la parte de sistema operativo… instala las librerias para poder compilar, si es que el paquete RPM no existe. No deberías tener mayor problema.
Para Ivan de la Jara: mirate la web, hay una pequeña guía de como va el rewrite (solo hay que cambiar un par de palabras, dejando la regla igual). Si no las cambias, también funciona pero es para tenerlo más adaptado al propio servidor http.
Para Angelfire: gracias por tus palabras, aunque no me considero un gurú. Solo intento solucionar problemas que la gente no entiende o no consigue probar.
Saludos.
Gracias por el consejo pero no se puede hacer nada
Diego | abril 11, 2008Gracias por el consejo pero no se puede hacer nada con la aplicación que hay ahora.
Primero: la arquitectura es de principiante sin planificación alguna.
Segundo: el desarrollo es de principiante (de jefe principiante): ahora quiero esto, ahora lo otro y ahora me quitas lo primero que no me gusta el color.
Tercero: ni de coña me pongo a revisar 24000 archivos del proyecto donde el 50% es código duplicado. Ya le he dicho al jefe MUCHAS veces que hay que reescribirla pero dice que tardamos mucho. El problema es que ahora está empezando a dejar de funcionar (ya casca demasiadas veces en el día) y es por eso por lo que me planteo este servidor.
A ver si hay suerte y entre el servidor y la reescritura va todo de cine, pero hasta entonces…
Por cierto, os quejáis de vuestro Core Duo a 2,4 y 2 GB de RAM. Nosotros tenemos 2 Quad Core (8 procesadores) con 8 GB de RAM y el sistema va de puta pena con sólo 60 personas tirando de él, así que imaginad como estará esto programado.
Me esperaba esta respuesta, en mayor o menor medida. No es
Relay | abril 11, 2008Me esperaba esta respuesta, en mayor o menor medida.
No es que nos quejemos de nuestro servidor (de hecho tira bastante). Nos quejábamos de Apache.
Ya veo que el problema es peor de lo que me imagino, 60 usuarios tiran abajo un Quad Core doble…
Mantennos al corriente de esos cambios (o de si nGinx + PHP solventa algo) 😉
Uy, estoy teniendo algunos problemas con mi dedicado en OVH:
Pande | abril 27, 2008Uy, estoy teniendo algunos problemas con mi dedicado en OVH: va dando tumbos, funciona bien una semana y de repente se va la carga del servidor por las nubes y peta. He estado buscando un formulario de contacto o un mail para escribirte y no lo he encontrado….
Estoy teniendo casi el mismo problema, ¿cómo puedo contactarte?
TecnoBITA | abril 27, 2008Estoy teniendo casi el mismo problema, ¿cómo puedo contactarte?
Ahora os contacto por mail :) Tendré que poner un contact
Relay | abril 28, 2008Ahora os contacto por mail 🙂
Tendré que poner un contact form o algo.
Hola: yo había escuchado (visto) algo de nginx, pues está en
Javier | octubre 13, 2008Hola:
yo había escuchado (visto) algo de nginx, pues está en http://www.avaxhome.ru una web con muuuuultiple visitas, de hecho tiene alrededor de 11.500 paginas y miles de visitantes. y va de p.m.
lo que no había encontrado ninguna referencia para poder instalarlo localmente y testearlo.
un saludo.
Gracias por tu apunte, es interesante ver como la gente
Relay | octubre 15, 2008Gracias por tu apunte, es interesante ver como la gente va dejando rastros de información.
Voy a leerla un rato a ver si me aporta más cosas 🙂
Hola! se lo he preguntado también a Andrés, pero a ver
Fernando Serer | febrero 9, 2009Hola!
se lo he preguntado también a Andrés, pero a ver si tu sabes que puede pasar y me puedes ayudar a resolverlo 🙂
estoy probando nginx en un proyecto con wordpress y estoy teniendo problemas para visualizar los preview desde dentro del wordpress.
Cuando pulso previsualizar, me carga siempre la home del blog.
carga servidor.com/?p=id_del_post&preview=true pero eso siempre me devuelve la home del blog en vez del preview del post.
os ha pasado? sabes que podría ser?
muchas gracias!!
No, pero tiene pinta de que no has puesto las
Relay | febrero 9, 2009No, pero tiene pinta de que no has puesto las reglas rewrite (realmente no se llaman así en nginx, pero para que nos entendamos) en la config del nginx.
Lo que pasa es que al pedirle una url en particular, nginx cree que le estas pidiendo la principal de la web porque no sabe interpretar lo que va detrás del .com/
Has posteado ya algo y te pone bien las URL?
Busca wordpress + nginx en google, que saldran un par de webs comentando la config para este cms.
ok, gracias si, ya estuve bastante rato con las dichosas reglas
Fernando Serer | febrero 10, 2009ok, gracias
si, ya estuve bastante rato con las dichosas reglas 🙂
si están funcionando, permalinks, etc. funciona pero el preview de un borrador no funciona. Una cosa rara.
El error viene del querystring en las reglas del nginx, la URL /?p=id&preview=true no funciona, la URL /index.php?p=id&preview&true si funciona
cuando encuentre la solución la pongo por aquí también.
Interesante... es raro porque a mi si me funciona y
Relay | febrero 10, 2009Interesante… es raro porque a mi si me funciona y anieto2k no creo que haya tenido problema.
[...] Hacía tiempo que veía una cosa extraña en la
Actualizando el NginX | Para colores, 32 Bits | julio 3, 2009[…] Hacía tiempo que veía una cosa extraña en la instalación del servidor: se actualizaba todo menos el paquete principal de las webs, el NginX (servidor de alto rendimiento). […]
Buenas, yo también tengo problemas con avalanchas de visitantes realmente
Àngel | septiembre 2, 2009Buenas, yo también tengo problemas con avalanchas de visitantes realmente escalofriantes un par de veces a la semana y no consigo controlar el tema.
Si puedieses contactar conmigo te estaría muy agradecido.
Saludos!
Ya te he enviado un correo ;)
Relay | septiembre 3, 2009Ya te he enviado un correo 😉
NL International
NLBizBof | junio 16, 2018NL International