En primer lugar, no estoy descontento con el rendimiento de mi sitio con Django, no está recibiendo tráfico masivo, un poco más de 1000 visitas por día hasta ahora.Desempeño de concurrencia en Django (apache2 prefork/mod_wsgi), ¿qué estoy haciendo mal?
Tenía curiosidad por lo bien que podría hacer frente a los picos de tráfico pesado, así que utilicé la herramienta ab para hacer algunas pruebas comparativas.
Me di cuenta de que el rendimiento cuando la concurrencia es mayor que 1 proporciona la misma cantidad de solicitud que una conexión simultánea.
¿No deberían los requisitos aumentar con la concurrencia?
Im en una máquina virtual con 1 GB de RAM, apache2 (prefork), mod_wsgi, memcached y mysql.
Todo el contenido de la página se ha almacenado en caché, la base de datos no recibe ningún resultado. Y si memcached soltara la entrada, solo hay 2 consultas ligeras (indexadas), y se deberían volver a almacenar en caché inmediatamente.
evaluación comparativa de datos: (nota: i hizo referencia con 10k 2000 y las solicitudes con los mismos resultados)
En la página de inicio, que se sirve a través apache2/mod_wsgi por Django:
-n100 C4: http://dpaste.com/97999/ (58,2 reqs/s)
-n100 -c1: http://dpaste.com/97998/ (57,7 reqs/s)
Para robots.txt, directamente desde apache2:
-n100 C4: http://dpaste.com/97992/ (4917 reqs/s)
-n100 C1: http://dpaste.com/97991/ (1412 reqs/s)
Ésta es mi Apache conf: http://dpaste.com/97995/
Editar: Se ha añadido más información
wsgi.conf: http://dpaste.com/98461/
mysite. conf: http://dpaste.com/98462/
My wsgi-handler:
import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
No indica si Apache está compilado con prefork o MPM de trabajador. No proporciona la configuración que está utilizando para que su aplicación alojada por mod_wsgi, por lo que no tiene idea de si está utilizando el modo incrustado o el modo daemon. El uso de 100 solicitudes para una muestra de evaluación comparativa tampoco generará buenos resultados; normalmente, le conviene usar miles. Tampoco puede decir si se ha asegurado de haber eliminado las demoras de inicio. Apache/mod_wsgi cargará de forma perezosa la aplicación web Python. Tampoco hay indicación de si su solicitud está en contra de una base de datos y si es el problema. Se necesita más información. –
Se agregó más información. Lo comparé con solicitudes de 2000 y 10k con los mismos resultados. La solicitud no llega a la base de datos, me he asegurado de que todo esté en caché (memcached), y top me dice que son solo los procesos de apache que están usando (todos los recursos). – schmilblick
Ah, y en realidad tenía "prefork" en el encabezado, por lo que se proporcionó información. Se agregó al texto ahora para mayor claridad. – schmilblick