Optimizando APACHE en CentOS, Rhel y Fedora
En este post orientaremos sobre como tunear nuestro servidor Apache, intentando dejar claro que cosas tocar y que función cumplen.
La idea NO es que sea utilizado como ejemplo (si bien dare algunos valores) sino más bien explicar cada item lo más humanamente posible para que podamos comprender y elegir la mejor configuración posible.
Los tuneos de nuestros servidores es casi una tarea diaria y varía de cada servidor tenemos, dado que depende de muchísimos factores a tener en cuenta como pueden ser las características del servidor (CPU, RAM, HDD, etc), cantidad de sitios, tipo de sitios, etc.
Todas las modificaciones las haremos en el archivo de configuración de Apache:
# vi /usr/local/apache/conf/httpd.conf
Lenguaje del código: PHP (php)
MaxClients: Número total de conexiones que atenderá a la vez el servidor. Este valor no debe ser mayor de 300, ni menor a 100, si es un valor muy alto y el servidor tiene un ataque podría hacerlo colapsar y si colocas un valor muy bajo tendrías clientes en espera, lo cual genera un cuello de botella, devolviendo errores debido a los Timeout.
MinSpareServers y MaxSpareServers: Controlan (mediante un límite mínimo y máximo) cuantos procesos de apache estan en espera, es decir, son procesos de Apache activos pero a la espera de conexiones o peticiones. Al estar activos la respuesta es inmediata, pero estar en modo espera hace que se consuman recursos del server, por lo cual deberemos tener un buen tuneo de estos 2 valores.
Los valores que se recomiendan son estos:
MinSpareServers 5
MaxSpareServers 10
MaxRequestsPerChild: Controla cuantas peticiones atenderá un proceso de apache (llamado hijos), mientras que con MinSpareServers y MaxSpareServers controlábamos cuantos procesos hijo puede haber activos, con MaxRequestsPerChild controlaremos la cantidad de peticiones que atenderá cada uno antes de cerrar el proceso y refrescarlo con uno nuevo.
El valor muy alto puede hacer que los procesos se cuelguen y queden ocupando recursos, pero también un valor muy bajo haría que constantemente se estén pidiendo procesos con el eventual consumo de recursos.
Un valor que funciona muy bien es:
MaxRequestsPerChild 1000
KeepAlive y MaxKeepAliveRequests: keepalive hace que las sesiones http sean más largas y que permitan más peticiones de acceso desde la misma conexión. Si bien el keepalive hace que en algunos casos la mejora en respuesta de una web aumente en casi un 60% por otro lado tenemos un elevado consumo de recursos del servidor, haciendo que colapse o quede con problemas de estabildiad.
MaxKeepAliveRequests nos dará el tiempo máximo, el cual no debe superar los 2 segundos.
StartServers: Muestra la cantidad de procesos que se inician al arrancar el servidor.
Este puede ser establecido dentro del mismo rango que el MinSpareServers y MaxSpareServers
Timeout: Tiempo de espera de una conexión. Este valor nos dará el tiempo de respuesta máximo de una petición, desde el inicio hasta el refresco en el navegador.
Los valores van desde 50 a 300, si los colocas muy bajo puede ser que tus clientes tengan una respuesta de timeout anticipada del navegador y si superas los 300 podrías tener problemas en horas pico donde las conexiones sean muchas.
Esta sería una configuración potable:
Timeout 30
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 256
MaxClients 150
MaxRequestsPerChild 10000
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
IMPORTANTE: Estos valores dependen de cada servidor, y dependen de la cantidad de visitas o tráfico recibido.
Una ves tuneados estos valores recuerden realizar un reinicio de nuestro servicio web:
# service httpd restart
Lenguaje del código: PHP (php)
Comentarios recientes