| Inicio | Noticias | Comunicados | Mesa de ayuda | Mapa de sitio | RSS |
|
Optimización de Apache en FreeBSD Cuantas veces nos ha pasado que configuramos nuestros servidores lo mejor que podemos, pasa un tiempo y cuando tenemos que configurar otro, simplemente copiamos la configuración sin recordar que hace cada parámetro; bueno, este artÃculo pretende recopilar ajustes especÃficos a Apache sobre FreeBSD y explicar que hace cada opción de configuración. Parte 1: Sistema Operativo La primera fase de la optimización consiste en configurar correctamente el sistema operativo, para ello hay que definir algunos ajustes en diferentes lugares. /etc/loader.conf accf_http_load="YES" accf_data_load="YES" kern.ipc.somaxconn=1024 Las primeras 2 lÃneas cargan los módulos accf_http(9) y accf_data(9) en el kernel, al iniciar el sistema. El módulo accf_http agrega un filtro en el socket que se encarga de pasar la petición desde el kernel a la aplicación, hasta que una petición HTTP/1.0 o HTTP/1.1 HEAD o GET completa es buffereada en el kernel. Su utilidad es que un servidor no tendra que cambiar de contexto varias veces antes de realizar el análisis inicial de la petición, reduciendo asà la cantidad de uso de CPU para manejar peticiones entrantes. El módulo accf_data es similar a accf_http, sin embargo este previene que la aplicación reciba el descriptor de conexión hasta que datos lleguen a la conexión. La variable kern.ipc.somaxconn se encarga de limitar el tamaño de la cola de escucha para aceptar nuevas conexiones TCP. Lo ideal para un servidor web es valores de 1024 o mas. También, colas mas largas hacen un mejor trabajo para evitar ataques de DoS. /etc/sysctl.conf net.isr.direct=1 Su objetivo es mejorar el desempeño, reducir la latencia y uso de CPU a través de la reducción del número de cambios de contexto. Parte 2: Servidor Web La segunda parte de la optimización consiste en instalar y configurar correctamente Apache para que aproveche al máximo las caracterÃsticas del sistema. httpd.conf EnableMMAP on EnableSendfile on KeepAlive Off EnableMMAP permite al proceso httpd usar mapeado en memoria si necesita leer contenidos de un archivos durante el envÃo. EnableSendfile controla el uso de la llamada del sistema "sendfile", la cual es mucho mas eficiente que la operación conjunta de read/send y el uso de buffers de memoria. La implementación de sendfile en freebsd es "zero-copy", significando que esta optimizada para que el copiado de datos de archivo sea evitado. La directiva KeepAlive tiene como objetivo reutilizar sockets para mejorar la transferencia de múltiples archivo a un solo cliente, sin embargo, cuando se tiene una gran cantidad de conexiones recurrentes, se comienzan a saturar complicando la conexión al servidor. Lo ideal es tener esta directiva en Off. Además de lo anterior, es recomendable deshabilitar los módulos no utilizados ya que por defecto, todos los módulos están activos. En FreeBSD i386 esto no hace gran diferencia, pero en amd64 cada módulo puede llegar a consumir hasta 3mb de memoria, por proceso. Datos interesantes Un dato importante al instalar apache es, asegurarse de habilitar el uso de "kqueue". La llamada del sistema "kqueue" es el manejador de eventos mas optimizado que existe sobre FreeBSD, es mucho mas eficiente y potente que utilizar select() o poll(); para notificar que una conexión esta lista para enviar o recibir. En caso de utilizar el port www/apache20, es necesario compilarlo con el flag "-DWITH_KQUEUE_SUPPORT" para activar el soporte de kqueue. El port www/apache22 ya lo trae activado por defecto. Referencias * AcceptFilter * kqueue * net.isr.direct * kern.ipc.somaxconn * vm.pmap.shpgperproc Manual * accf_http (9) * accf_data (9) * sendfile (2) * kqueue (2) Autor Angel León es administrador de sistemas del Sistema Internet de la Presidencia y administrador de www.sysadmin.org.mx Fuente: sysadmin.org Ver nota original |
| Última actualización el Martes, 23 de Junio de 2009 12:01 |