Case study: Optimizando mi web server en linux pt. 3

Luego de revisar las variables posibles de pobre desempeño a nivel más bajo, me acerco a la optimización del software. Vuelvo a reiterar que «Your mileage may (and will) vary», debido a que mis requerimientos son muy específicos respecto al software servido.

Ver también:

Ahora, Apache

Tras mejorar las variables más comunes de posibles cuellos de botella que sean en parte culpables por el rendimiento, llegamos al servidor mismo.

Elección de MPM

Como ya antes fue enunciado, Apache tiene principalmente tres modelos de funcionamiento, siendo mayoritariamente utilizados los modelos de Prefork y Worker. Prefork es tal cual el modelo antiguo de apache 1.3, es decir un proceso por cliente y sin hilos. Worker es un modelo de multihilos en donde algunos procesos manejan distintos clientes mediante diferentes hebras. Debido al costo de cambio de contexto de los procesos en prefork, worker desde ese punto de vista provee un mayor desempeño. El problema asoma cuando utilizamos software que no tenga un suficientemente elaborado sistema de manejo de seguridad de memoria en el ambito de los hilos (o «Thread Safe»), como es el problema de PHP y su TSRM.

Read more →

Case study: Optimizando mi web server en linux pt. 2

Ya me voy acercando y una vez en el servidor, ¿qué más puede provocar cuellos de botella?. El acceso a los datos.

Ver también:

Sistema de archivos

Tras años de jugar en cuanto sistema de archivo existente en Linux, más que benchmarks y anotaciones sagradas tengo experiencias, sesgadas probablemente, pero no menores. Manteniendo un servidor web, donde en promedio cada archivo servido no tiene mas de 100KB de tamaño en disco, es necesario un sistema de archivos que sea eficiente (y estable) con archivos pequeños.

Mi primera tendencia fue a utilizar XFS, pero pesar de su solidez y rapidez, su comportamiento cuando el sistema de archivos se hace cada vez mas granulado comienza a dar problemas, búsquedas en directorios demasiado grandes se hacen cada vez más lentos. ReiserFS entonces fue mi segunda intención, pero tras varios accidentes (si, ya dije que probablemente sesgados) en donde terminé con sistemas inconsistentes, no graves estadísticamente hablando, pero que se corrompa un httpd.conf con cientos de vhosts no es ninguna gracia (como alguna vez me ocurrió), finalmente descarté ReiserFS tal vez tan solo para tener la conciencia limpia, ya que continúo utilizandolo en mis desktop (al igual que los «filmservers» con XFS).

Read more →

Case study: Optimizando mi web server en linux pt. 1

Este no pretende ser un manual de configuración y optimización específico para tu aplicación web, sino más bien un caso de estudio ajustado a mis necesidades específicas. Puedes tomar en cuenta el análisis hecho para sacar tus propias conclusiones. Estará compuesto de varios episodios en donde se toman en cuenta los diversos caminos a tomar.

Reitero esto ya que de seguro «tu kilometraje puede variar».

Ver también:

La idea

Tal vez uno de los servicios de mayor uso y expansión a traves de internet sea la web. Y en este ámbito quien se lleva la torta es Apache, quien según Netcraft maneja alrededor del 67% de los sitios web disponibles en la red.

Un dato aparte es que Apache ha tenido durante el 2006 una pequeña baja en su supremacía en favor de otras soluciones web, probablemente por las mismas razones que estoy escribiendo: la busqueda de la mejor performance.

Hay bastantes otros servidores web menos usados pero que logran mayores performances para contenidos particulares. Lighhtpd y su actual relación con la moda Web 2.0 y Ruby on Rails, y servidores principalmente orientados a servir óptimamente contenido estático como Thttpd, Boa (quien sirve el contenido estático de Slashdot, algo no menor) y Tux. Y por último pero no menor, la aparición de el (de esperar) completo reemplazo de Apache, Cherokee, del español Alvaro López.

Es claro entonces el interés por lograr la mayor performance posible, reuniendo el conjunto de tecnologías que lo permita sin ya existir el apego casi religioso a la predilección por Apache.

Read more →

Throttling Apache

Hace un par de días, Andrea publicó unos videos de su colección de Plan Z para compartirlos con unos amigos de la Universidad que eran tan fanáticos como ella de Peirano y compañía. Pues como era de esperarse en este mundo global aparecieron «amigos» por todas partes luego de ser publicada su dirección en los foros de «El Antro». Esto provocó de inmediato un «efecto antro» (efecto slashdot, pero con download accelerator debajo del brazo) en que las malas costumbres de algunos comenzaron a afectar el buen cumplimiento de apache.
Read more →

Apache2: No space left on device?

Desde hace algun tiempo el servidor web en donde mantengo mi sitio entre otros, ha tenido comportamientos algo erraticos y luego de algunos días a pesar de los procesos estar arriba, simplemente no responde. La única solución era matar los procesos (que a pesar de no ser zombies, no respondian ni siquiera a apache2ctl) y volver a iniciar el servicio. Mi primer sospechoso fue el wiki de Gnome, basado en Moinmoin.
Read more →

Apache2

Read more →

UTF-8

Otro detalle con el uso Planet es su uso de UTF-8 en el tratamiento de los feeds. Planet recupera los feeds, determina si son iso o utf y lugo convierte todo a unicode. Luego la generación de la página es también pensando en unicode. Por esto, los templates y configuración también deben estar en unicode (si es que contienen carácteres «extraños») y el template debe indicar que se esta utilizando utf-8.
Read more →

Mod_Rewrite

mod_rewrite puede hacerte muy facil la vida. Despues de pelear un rato con Feedparser y algunas implementaciones ilegales de ambos lados (mi RSS generado y lo «corto de vista» de Feedparser) decidí cambiar definitivamente el formato de mis URL. Antiguamente las URL estaban formadas por variables declaradas POST que PHP procesaba de forma estándar. Pero despues de intentar pasarle mas de tres variables, las url se forman algo desordenadas. Ahi es mejor transformar las url en componentes separados por algun string determinado, «/» por ejemplo.
Read more →

Gnome en Linux UTAL2002

Obviamente la guinda del pastel durante el “Primer seminario Linux, Universidad de Talca 2002” fue el proyecto Gnome Chile. Ni se noto que estabamos bastante cargados los relatores. Tres de nosotros teníamos una estrecha relación con el proyecto que nos hace, incluso sin querer, terminar hablando de ello. Con decir que Germán dictó su charla sobre CVS con una presentación magicpoint que tenía la particularidad de tener una “pata” de Gnome en el fondo ;-)
Read more →

Seminario Linux Universidad de Talca 2002

Fui invitado en calidad de relator al “Primer Seminario Linux, Universidad de Talca 2002”, los temas a dictar por mi parte fueron “Bind, Conceptos y configuración”, “Apache, Introducción y Configuración” y “Sendmail, Amado y Odiado”. También fui parte de la charla “Gnome en Chile” que dictamos entre Jorge Bustos, German Poo y Yo. Excelente experiencia, conocí gente valiosa, compañeros de trabajo de Jorge, Jci y a muchos mas que si empiezo a enumerar, seguramente se me quedarán en el tintero.
Read more →

Apache 2 + Php4

» Por fin logre hacer funcionar de forma estable Apache 2.0.35 junto a PHP 4.3-dev (desde su cvs). Tras varios intentos fallidos, mi sitio esta finalmente corriendo lo ultimo de Apache.org. El unico problema que me impide de momento realizar la mudanza definitiva es que mis enlaces tipo http://www.dewback.cl/redirect/30 dejan de funcionar, ya que de ninguna manera (conocida por mi aun) he podido realizar el Files redirect ForceType que realizaba en Apache 1.
Read more →

Visitas y Diseño.

» He estado preparando un nuevo diseño para el sitio. Es por esto que algunas horas al dia, bajo el servidor para hacer pruebas no solamente con apache, sino que las bases de datos entre otros, lo que me hacen imposible mantener ambos sitios arriba. Espero disculpen las “molestias”, pero es para ofrecer un mejor sitio a los que me visitan.  » Spazz y Olz estan arreglando sus maletas para venir de paseo a Concepción.
Read more →