2012/1/10 MAbeeTT <[email protected]>

> 2012/1/9 Federico Budassi <[email protected]>:
> > Gente,
> >
> > después de unos cuatro años sin postear en esta lista en particular,
> vuelvo
> > a hacerlo con un problema que me tiene a mal traer.
> >
> > Esta es la situación, para mi tesis de grado, investigando acerca de
> Event
> > Driven Web Servers, intento sacar una comparativa de cantidad máxima de
> > conexiones keep alive atendidas por distintos Http servers. En
> particular,
> > estoy intentando generar la mayor cantidad de conexiones keep-alive con
> > Apache 2.2.20, corriendo en un Ubuntu Server x64 11.10 virtualizado en un
> > Vmware (que corre sobre otro Ubuntu Desktop x64 11.04). Qué significa
> esto?
> > que con un benchmark (programado por mi en Java, por no servir
> > ApacheBenchmark, ni httpref, ni JMeter entre otros) genero miles de
> > requests GET hacia ese Apache y las dejo abiertas, viendo cual es el
> límite
> > al que puedo llegar con los 8GB de memoria que tengo asignados a esa
> > máquina virtual. Obviamente el benchmark no genera esas conexiones
> > generando un thread por cada una, sino que las genera por medio de un
> > framework que maneja eventos (Netty), y por lo tanto solo necesita un par
> > de docenas de threads para generar algo asi como 500000 conexiones con
> > otros 8GB de ram en otra máquina virtual.
> >
> > La cuestión es que Apache, con su módulo de multiprocesamiento Worker
> > (mpm_worker_module), el que trae por defecto en ubuntu, genera un hilo
> por
> > cada conexión (situación que es querida por mi en este caso, para probar
> el
> > límite de conexiones al cual puedo llegar con la memoria antes dicha).
> > Ahora, llegado cierto punto, el sistema operativo no le permite a apache
> > seguir generando hilos, y en /var/log/apache2/errors.log, apache
> comienza a
> > quejarse con logs como este:
> >
> > [Sun Jan 08 22:00:32 2012] [alert] (11)Resource temporarily unavailable:
> > apr_thread_create: unable to create worker thread
> >
> > Lo cual deja casi obvio que el kernel le está impidiendo seguir abriendo
> > threads.
> >
> > Acá van algunas configuraciones que he estado teniendo que realizar para
> > lograr agrandar otros límites (antes solo podía llegar a ~32000
> conexiones):
> >
> >
> >   - /etc/security/limits.conf (ayuda para cambiar algunos límites
> visibles
> >   con ulimit que impedían crear más procesos entre otras cosas):
> >
> > * soft  nofile   1000000
> > * hard  nofile   1000000
> > * soft stack 1024
> > * hard stack 1024
> > * soft nproc 1000000
> > * hard nproc 1000000
> > * soft sigpending 1000000
> > * hard sigpending 1000000
> >
> >
> >   - /etc/apache2/apache2.conf
> >
> > Timeout 86400
> >
> > KeepAlive On
> >
> > MaxKeepAliveRequests 0
> >
> > KeepAliveTimeout 86400
> >
> > <IfModule mpm_worker_module>
> >    ServerLimit         100
> >    StartServers         30
> >    MinSpareThreads   70000
> >    MaxSpareThreads   90000
> >    ThreadLimit        4000
> >    ThreadsPerChild    4000
> >    ThreadStackSize  262144
> >    MaxClients       200000
> >    MaxRequestsPerChild   0
> > </IfModule>
> >
> >
> >   - Otras configuraciones y comandos (la primera linea genera varios
> alias
> >   a una interfaz para tener más de 65530 puertos y poder atender muchas
> más
> >   conexiones):
> >
> > for i in `seq 20 35`; do ifconfig eth0:$i 192.168.1.$i up ; done
> > echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
> > swapoff -a
> > sysctl vm.max_map_count=1000000
> > sysctl kernel.threads-max=1000000
> > sysctl kernel.pid_max=1000000
> >
> >
> > En todo lo anterior pueden ver modificaciones a límites del sistema
> > operativo, una parte de la configuración de apache (la parte que
> importa),
> > y algunos comandos que corro cada vez que arranco el sistema para
> > incrementar límites o crear muchos aliases para una misma interfaces para
> > poder recibir más de 65536 conexiones por interfaz.
> >
> > Las conexiones que se generan son simples peticiones estáticas del
> > index.html con HTTP/1.1 con el header Connection: keep-alive, de tal
> forma
> > que las conexiones queden abiertas (y como hay un timeout de 1 día, o
> 86400
> > segundos, no se cierran).
> >
> > La cuestión es simple, como podrán ver, la configuración del worker_mpm
> de
> > apache acepta un máximo de 200000 conexiones, y abre al arranque 70000
> > conexiones, aunque debido a alguna limitación del kernel que estoy
> pasando
> > por algo, o que no conozco, apache no es capaz de crear más de
> > aproximadamente 60000 conexiones (o hilos, dicho de otra forma). Necesito
> > al menos duplicar ese valor para poder llenar la memoria de mi
> computadora
> > de conexiones.
>
> mmmm, si creés que está en el kernel, mirá los logs que deja el
> kernel, y eventualmente agregá verbosidad, no recuerdo exactamente
> pero creo que e puede agregar bastante vervosidad sin necesidad de
> recompilar, vía parámetros del kernel.
>
> >
> > Espero que todo esto se haya entendido bien y comprendan mi punto, si no
> se
> > entiende, pregunten.
> >
> > Muchas gracias por su ayuda, la cual sera muy bien recibida!
> >
> > Federico Budassi.
>
>
>
> --
>              .::MAbeeTT::.
>
>  mabeett [at] gmail [ dot] com
>



No se si lo estaré haciendo bien, pero intenté usar dmesg y nada, y le subí
el nivel de logueo a 8 con sudo dmesg -n 8, pero no loguea nada de nada con
respecto a apache.

Es eso a lo que vos hacías referencia?

Gracias!
Federico.

Responder a