Optimizando Apache
- Mar
- 25
1 comentario! 228 palabras - 1 hits
algunos truquillos para optimizar el rendimiento de apache2 con php5 bajo linux
Una de las tareas que más tiempo consumen en el mantenimiento de un servidor como apache es la optimización de recursos, cuando se gestiona un sitio con un considerable número de páginas dinámicas que a su vez realizan operaciones con bases de datos puede ser muy tedioso, lo se por propia experiencia.
En el caso concreto del servidor que hospeda esta página es un tema que he de vigilar con sumo cuidado, al ser un host “casero” tengo los recursos limitados sobre todo en el aspecto del ancho de banda, la tasa media de transferencia ronda los 200mb día, solo del servidor web!!. En cuanto al hardware tampoco es que vaya sobrado, 512mb de RAM en una CPU via de 1ghz con un disco de 7200rmp ata66 es todo de lo que dispone, y por la propia arquitectura del pc (barebone) no es que se pueda añadir mucho más.
Para poder mantener un servidor postfix gestionando unos 5-6 mensajes/minuto junto con un servidor apache atendiendo unas 50 visitas/hora he tenido que rebuscar en las opciones de ambos servidores realizando pruebas y cambios, no siempre con los resultados que esperaba, hasta encontrar el equilibrio entre rendimiento y consumo de recursos.
Mi consejo general es el basar todos los procesos en la RAM, realizar los mínimos accesos a disco mejora el rendimiento de manera incomparable.
Apache
Apache es un servidor basado en threads (palabro que no se muy bien como traducir) pero que básicamente funciona lanzando procesos en memoria que se encargan de servir a las peticiones de los clientes. Por defecto el numero de procesos que lanza al iniciarse es bastante bajo, con lo que es recomendable jugar un poco con los valores StartServers, MinSpareServers, MaxSpareServers.
También es recomendable cambiar el valor de los parámetros MaxKeepAliveRequests y KeepAliveTimeout, dejando el primero con un valor alto, como mínimo 100, y el segundo con un valor más bien bajo, entre dos y cinco segundos, ya que es el valor que indica el tiempo máximo que ha de esperar un proceso entre petición y petición.
Otro de los factores que afectan al rendimiento es la configuración de los “virtual host”, existen determinados parámetros que aumentan el tiempo de respuesta del servidor y en consecuencia la carga de este. Es recomendable evitar el uso de ficheros .htaccess, declarando todos los parámetros desde el fichero de configuración del servidor, intentando ser lo mas especifico posible en las configuraciones por directorio.
Otra de las posibilidades que ofrece apache es la de utilizar un segundo servidor para atender parte de las peticiones, a esto se le llama utilizar un proxy inverso, si estas interesado en saber como configurar uno, utilizando lighttpd para servir las peticiones cgi, puedes consultar este articulo donde explico como hacerlo, resulta sumamente sencillo y es realmente efectivo, sobre todo cuando utilizamos aplicaciones basadas en perl como Movable Type.
Como toda la estrategia de optimización se basa en utilizar lo mas posible la memoria RAM, una parte importante se basa en cargar tan solo los módulos imprescindibles tanto en apache como en php, en la medida de lo posible hay que intentar dejar el máximo de RAM libre una vez estén en marcha todos los servicios.
Una vez optimizados estos parámetros, también podemos plantearnos hacer uso de algún tipo de cache para servir los contenidos, apache cuenta con los modulos mod_expire y mod_deflate que utilizados en conjunto nos ahorraran un buen porcentaje de ancho de banda. El primero se encarga de comunicar al navegador del cliente si nuestro contenido ha sido modificado desde su última visita, obligando así a solo descargarlo en el caso de que esto sea cierto, mientras que el segundo envía el contenido comprimido a los navegadores que soporten este formato.
PHP
Por supuesto que si hablamos de servir páginas dinámicas basadas en lenguaje php también hay que optimizar la forma de trabajar de este último. Existen numerosos “optimizadores” para php, pero personalmente me quedo con el zend optimizer, que actúa en la manera que me interesa, optimizando el uso de los scripts php en memoria.
El resto de opciones a mejorar en php dependen mucho del contenido a servir, pero como consejo general, al igual que con apache, es recomendable el uso de cache y la compresión de contenidos.
Linux
Centrándonos un poco en los aspectos del sistema operativo, lo ideal para un servidor es el evitar tener demasiados servicios corriendo a la vez, en las configuraciones por defecto de la mayoría de distribuciones se incluyen una serie de servicios que pueden ser omitidos con seguridad, para esto recomiendo el uso de la herramienta sysv-rc-conf que de manera visual nos permite manipular los servicios de inicio desde la consola.
Por supuesto podemos optimizar mas parámetros del sistema, como la cantidad de “sockets” que se pueden habilitar y la gestión del archivo de intercambio, para ello editamos el archivos /etc/sysctl.conf y colocamos los siguientes parámetros, vm.swappiness=10 que evita el uso indiscriminado del archivo de intercambio, fs.file-max=16384 para aumentar el numero de ficheros que se pueden abrir y kernel.threads-max=2048 que aumenta el numero de procesos que se pueden ejecutar.
Indudablemente existe numerosas maneras de optimizar el funcionamiento de un servidor, estos consejos no son mas que fruto de mi propia experiencia en la administración de esta web, que después de muchas pruebas me ofrecen el rendimiento que deseo en todo momento. Espero que sirvan de orientación a todos los que como yo quieran experimentar en este campo.
1 comentario
# Escrito por seeal hace 4 meses, 3 semanas
muy buen post me aclarado muchas dudas ^^