Mi uso de memoria aumenta con el tiempo y reiniciar Django no es amable con los usuarios.
No estoy seguro de cómo perfilar el uso de la memoria, pero algunos consejos sobre cómo comenzar a medir serían útiles.
Tengo la sensación de que hay algunos pasos simples que podrían producir grandes ganancias. Asegurar que 'depurar' esté configurado como 'Falso' es un problema obvio.
¿Alguien puede sugerir otros? ¿Cuánta mejora tendría el almacenamiento en caché en sitios de poco tráfico?
En este caso, estoy ejecutando bajo Apache 2.x con mod_python. Escuché que mod_wsgi es un poco más delgado, pero sería difícil cambiar en esta etapa a menos que sepa que las ganancias serían significativas.
Editar: Gracias por los consejos hasta ahora. ¿Alguna sugerencia de cómo descubrir qué está usando la memoria? ¿Hay alguna guía para la creación de perfiles de memoria de Python?
Además, como se mencionó, hay algunas cosas que harán que sea difícil cambiar a mod_wsgi, por lo que me gustaría tener una idea de las ganancias que podría esperar antes de avanzar en esa dirección.
Editar: Carl publicó una respuesta un poco más detallada aquí que vale la pena leer: Implementación de Django: Cortar los gastos generales de Apache
Editar: El artículo de Graham Dumpleton es el mejor que he encontrado en las cosas relacionadas con MPM y mod_wsgi. Sin embargo, estoy bastante decepcionado de que nadie pueda proporcionar información sobre la depuración del uso de memoria en la aplicación.
Edición final: Bueno, he estado discutiendo esto con Webfaction para ver si pueden ayudar a recompilar Apache y esta es su palabra al respecto:
"Realmente no creo que obtendrá un gran beneficio al cambiar a una configuración MPM Worker + mod_wsgi. Calculo que podría ahorrar alrededor de 20 MB, pero probablemente no mucho más que eso".
¡Entonces! Esto me lleva de vuelta a mi pregunta original (de la que todavía no soy muy sabio). ¿Cómo se puede identificar dónde radica el problema? Es una máxima bien conocida que no optimizas sin probar para ver dónde necesitas optimizar, pero hay muy pocos tutoriales sobre la medición del uso de la memoria de Python y ninguno específico para Django.
Gracias por la ayuda de todos, pero creo que esta pregunta aún está abierta.
Otra edición final ;-)
Pregunté esto en la lista de usuarios de django y obtuve algunas respuestas muy útiles.
¡Honestamente la última actualización!
Esto acaba de ser lanzado. Podría ser la mejor solución hasta el momento: perfilar el tamaño del objeto Django y el uso de memoria con Pympler