¿Alguien sabe de algún problema con el marco de almacenamiento en caché de Django cuando se implementa en Apache / Mod_WSGI?

Cuando se prueba con el marco de almacenamiento en caché localmente con el servidor de desarrollo, utilizando el middleware de creación de perfiles y FileBasedCache o LocMemCache, Django es muy rápido. Mi tiempo de solicitud va de ~ 0.125 segundos a ~ 0.001 segundos. Fantástico.

Implemento el código idéntico en una máquina remota que ejecuta Apache / Mod_WSGI y mi tiempo de solicitud va de ~ 0.155 segundos (antes de implementar el cambio) a ~ .400 segundos (posterior a la implementación). Así es, el almacenamiento en caché ralentizó todo .

He pasado horas investigando todo, buscando algo que me falta. Intenté usar FileBasedCache con una ubicación en tmpfs, pero eso tampoco logró mejorar el rendimiento.

He monitoreado la máquina remota con la parte superior, y no muestra otros procesos y tiene 6GB de memoria disponible, por lo que básicamente Django debería tener control total. Me encanta Django, pero es increíblemente lento, y hasta ahora nunca he podido obtener el marco de almacenamiento en caché para tener un impacto notable en un entorno de producción. ¿Hay algo que me falta?

EDITAR: También he intentado memcached, con el mismo resultado. Confirmé que Memcached se estaba ejecutando al conectarlo.

1
Cerin 20 sep. 2011 a las 00:57

3 respuestas

La mejor respuesta

De hecho, django es lento. Pero debo decir que la mayor parte de la lentitud va de la aplicación en sí misma ... django simplemente te obliga (pero proporciona malos ejemplos en documentos) a hacer cosas perezosas que son lentas en producción.

Primero de: prueba nginx + uwsgi. Es lo mejor.

Para optimizar su aplicación: necesita encontrar lo que está causando la lentitud, puede ser:

  • consultas lentas de la base de datos (muchas consultas o solo consultas lentas)
  • base de datos lenta en sí
  • sistema de archivos lento (nfs por ejemplo)

Intenta registrar consultas de solicitud y mira iostat o iotop o algo así.

Tuve este escenario con apache + mod_wsgi: la primera solicitud del navegador fue muy lenta ... luego, algunas solicitudes del mismo navegador fueron rápidas ... luego, si no hacía nada durante 2 minutos, ganaba muy lentamente. No sé si eso se configuró incorrectamente apache si estaba cerrando la aplicación wsgi y comenzando para cada solicitud de keepalive. Me acaba de publicar: instalé nging y con nginx + fgxi todo fue mucho más rápido que apache + mod_wsgi.

0
marc_s 23 ene. 2016 a las 09:12

Me pasó lo mismo y me preguntaba qué es lo que está tomando tanto tiempo. cada caché obtenía alrededor de 100 milisegundos.

Así que depuré el código del código django locmem y descubrí que pickle me estaba tomando mucho tiempo (estaba almacenando en caché una tabla completa en locmemcache). Envolví el locmem porque no quería nada avanzado, así que incluso si quitas el pepinillo, lo desenredas y lo pones. Verás una mejora importante.

Espero que ayude a alguien.

0
Nishant Yadav 30 ago. 2013 a las 11:14

Tuve un problema similar con una aplicación que usa memcached. La solución estaba ejecutando mod_wsgi en modo demonio en lugar de modo embebido, y Apache en modo mpm_worker. Después de eso, la aplicación funciona mucho más rápido.

0
zaan 20 sep. 2011 a las 08:50