Foros del Web » Administración de Sistemas » Apache »

Configuración performance de Apache

Estas en el tema de Configuración performance de Apache en el foro de Apache en Foros del Web. Hola a todos, Ante todo no sé si será un tópico de pregunta, pero llevo ya unos años y no consigo aprender de una vez ...
  #1 (permalink)  
Antiguo 21/08/2011, 17:05
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 1
Exclamación Configuración performance de Apache

Hola a todos,
Ante todo no sé si será un tópico de pregunta, pero llevo ya unos años y no consigo aprender de una vez por todas algo tan sencillo como configurar apache en cuanto a parámetros de rendimiento.

Info:
Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 mod_fcgid/2.3.6

En resumidas cuentas, apache 2.2.19, PHP 5, fastcgi y MPM Worker.
Quad Core a 2.9Ghz (i7), 6GB RAM, CPanel.

La web es dinámica, con muchas imágenes (50-80 por página).

Quisiera configurar apache para soportar actualmente unos 400-500 online (tengo hasta 240 online actualmente, y crece rápido).

Mi configuración actual es:

fileetag: None
keepalive: On
keepalivetimeout: 11
maxclients: 800
maxkeepaliverequests: 40
maxrequestsperchild: 10000
maxspareservers: 12
minspareservers: 6

root_options: ExecCGI, FollowSymLinks, Includes, IncludesNOEXEC, Indexes, SymLinksIfOwnerMatch
serverlimit: 800
serversignature: Off
servertokens: ProductOnly
sslciphersuite: ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOWSLv2:-EXP:!kEDH
startservers: 7
timeout: 300
traceenable: Off


Me interesa configurar correctamente los parámetros en negrita.

Si me pasáis un manual o guía que esté BIEN EXPLICADO os lo agradecería mucho. He visto que el comando:
ps -ylC httpd --sort:rss
sirve para obtener la memoria fisica usada por un child process, y se determina el max client: memoria total / max memoria usada por un child process.

Tenía configurado el server para soportar hasta 400 max clients (y serverlimit igual), pero con el KEEP ALIVE (peticiones ilimitadas) apache se quedó sin idle workers, saturando el servidor. Aumenté a 700 el max clients, y tiraba, aunque las peticiones por segundo rondaban eso, 700 petitions currently processing.

Si desactivo keepalive, las peticiones caen a 50 o menos. Quiero mantener el keep alive (para conexiones lentas sino tarda hasta 7 segundos en procesar una página, mientras solicita 40 imágenes que tiene una página).

No sé si me pasé con tanta explicación, pero quería dejar algunas cosas relevantes claras.

GRACIAS DE ANTEMANO, como siempre.
Como digo, un manual bueno explicando técnicamente las cosas me serviría.
  #2 (permalink)  
Antiguo 21/08/2011, 19:03
Avatar de Datacenter1
Usuario no validado
 
Fecha de Ingreso: agosto-2005
Ubicación: Chicago
Mensajes: 1.982
Antigüedad: 19 años, 4 meses
Puntos: 144
Respuesta: Configuración performance de Apache

Saludos

A simple vista y sin ver la carga del servidor, sugiero

keepalivetimeout:5
maxrequestsperchild: 50000
maxkeepaliverequests:100

Una forma fácil y sencilla de optimizar puede ser colocar un proxy nginx que se encargue de todo el contenido estático esto le quitará bastante trabajo a Apache y utilizar un cache PHP como eaccelerator

Si deseas el máximo rendimiento y no te importa pagar un poco te sugiero ver Litespeed como sustituto de Apache
  #3 (permalink)  
Antiguo 22/08/2011, 02:37
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Configuración performance de Apache

Sí, disculpa. La carga es nula, 0.0 el CPU.
Lo probaré, muchas gracias :)
  #4 (permalink)  
Antiguo 22/08/2011, 16:41
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Configuración performance de Apache

Ya he conseguido hacer una buena configuración -creo, tendré que esperar a picos gordos-
Resulta que según la documentación de apache, el MPM Worker usa las variables Threads, esto es, los hilos que manejan los procesos (eso entendí).

El caso es que teniendo en cuenta las conexiones concurrentes (Keep alive), el alto número de peticiones por páginas (muchas imágenes), el bajo uso de CPU (0%) y RAM (10%), y un máximo de 200 online (reales), he configurado apache del siguiente modo:

Timeout 300
StartServers 5
MinSpareServers 5
MaxSpareServers 12
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 0
KeepAlive On
KeepAliveTimeout 10
MaxKeepAliveRequests 100
MinSpareThreads 300
MaxSpareThreads 400
ThreadsPerChild 100

El minsparethreads según he ojeado o percibido viendo el status de apache sirve para establecer hilos en espera a nuevas solicitudes, por tanto manteniendo 300 threads a la espera de nuevas conexiones considero buen margen, y threadsperchild para no saturar a los childs y mantenerlos demasiado tiempo vivos los mantengo a 100, esto es, unas dos peticiones de páginas web distintas.

Igual mi interpretación o explicación es incorrecta, pero es lo que he podido interpretar según mi experiencia. Lo ideal sería una explicación al estilo: "Entra un usuario, y habiendo X imágenes, se crean con keepalive X peticiones, entonces apache vé si hay a la espera -hilos- por decir algo, y los asigna, de no haberlos crea un nuevo proceso que genera 300 nuevos threads..."

xD ¿Existe algo así? Así veríamos la LOGICA de tanto caos.

MÁS CUANDO ESTA CONFIGURACIÓN RESULTA VITAL EN SERVIDORES DE ALTO TRÁFICO.

¡Saludos!

Etiquetas: servidores-web
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:20.