16.7.07

Espabilando un pelín a Apache2

Nadie discute que Apache2 es ideal para instalar en grandes servidores que atienden miles de peticiones al día, ya que está perfectamente preparado para ello gracias a "elementos" como los threads. Pero puede ser que necesitemos instalar Apache como pequeño servidor de pruebas o corparativo e incluso como servidor público en una máquina con el rendimiento justito. En este caso es recomendable ajustar al detalle los valores del servidor para hacerlo rendir sin que tengamos que pagar un alto precio en cuando a consumo de recursos se refiere. Algunos de los apartados de la configuración que podemos tocar para mejorar la eficiencia son los siguientes:

MaxClients y Max/MinSpareServers

En este apartado podremos ajustar el número de procesos padres/hijos a unos valores más adecuados al uso que deseamos darle al servidor. Es muy común la tendencia a reducir los "MaxClients" hasta valores ínfimos, pensando en la regla de tres de que menos procesos, menor consumo de memoria. Y si, hasta aquí, esta afirmación es cierta, pero en cuando realizamos peticiones al servidor web, si este valor es bajo el servidor puede hasta bloquearse por momentos, denegar conexiones e incluso permanecer totalmente inoperante. Por la contra, un alto número de "MaxClients" se traduce en un rendimiento positivo del servidor pero en una carga de memoria dependiendo del número de conexiones establecidas. Un número importante de "MaxClients" se va a traducir por tanto en un rendimiento positivo pero debemos ser cuidadosos con este valor cuando el servidor es de acceso externo.
En cuanto a los procesos hijos "Max/MinSpareServers" la situación es similar. No por poner un valor bajo en estas etiquetas vamos a tener un rendimiento mejor, ya que la situación es igual que en el caso anterior. Un valor bajo de estos valores obligará al servidor a abrir más procesos padres para satisfacer la demanda de peticiones. Al igual que en el caso anterior, es una pescadilla que se muerde la cola, ya que reduciendo el número de hijos el consumo de memoria bajará pero la carga del sistema será mayor hemos calculado mal estos números, volviendo al servidor inoperante.
Hay desmitificar por tanto, que el reducir el número de padres/hijos a valores ínfimos no es sinónimo de rendimiento y, al contrario, podemos pagar un alto precio en consumo de recursos.

HostnameLookup

Con esta directiva Apache intenta resolver los nombres de host en lugar de utilizar las direcciones IP. Esto puede ser útil para log o para aplicaciones CGI pero requiere un esfuerzo que nos podemos ahorrar ya que, por lo general, nos dará igual tratar con la IP que con el nombre. Desactivando esta directiva optimizaremos, por tanto, nuestro servicio.

AllowOverride

Esta función es muy útil y muy conocida. Mediante ficheros .htaccess guardados en cada directorio, podemos controlar el acceso a misma mediante juegos de usuario/pwd. Esto es muy útil pero, ¿vamos a usarlo en nuestro servidor? Porque si no es así, podemos desactivarlo y ahorrarle al servicio que por cada directorio que lea, está buscando el fichero.

FastCGI

Si vamos a hacer un uso intensivo de CGI, FastCGI es una interesante alternativa al módulo que viene por defecto en Apache2. El rendimiento de este módulo alternativo es sensiblemente mejor que los mod_X que vienen en las distribuciones de Apache2 (mod_cgi,mod_php...). Más información sobre FastCGI puede encontrarse en la web del proyecto http://www.fastcgi.com/, así como el API para diferentes lenguajes.

No hay comentarios: