135 votos

Reducción del uso de la memoria de Django. ¿La fruta madura bajo?

Mi uso de memoria aumenta con el tiempo y el reinicio de Django no es bueno para los usuarios.

Estoy seguro de cómo ir sobre el perfil de la uso de memoria, pero algunas sugerencias sobre cómo iniciar la medición sería útil.

Tengo la sensación de que hay algunos pasos simples que puede producir grandes ganancias. Garantizar la 'depuración' es 'False' es un caso obvio de biggie.

¿Alguien puede sugerir a los demás? ¿Cuánto mejora el almacenamiento en caché de bajo-sitios de tráfico?

En este caso estoy corriendo bajo Apache 2.x con mod_python. He oído mod_wsgi es un poco más delgado, pero sería difícil de cambiar en esta etapa, a menos sé que las ganancias serían significativos.

Edit: Gracias por los consejos tan lejos. Alguna sugerencia de cómo descubrir cuál es el uso de la memoria? ¿Hay guías de Python para creación de perfiles de memoria?

Asimismo, como se mencionó, hay un par de cosas que hacen que sea difícil para cambiar a mod_wsgi así que me gustaría tener alguna idea de las ganancias que me podía esperar antes de arar adelante en esa dirección.

Edit: Carl publicado un poco más detallada respuesta aquí que vale la pena leer: http://stackoverflow.com/questions/488864/django-deployment-cutting-apaches-overhead

Edit: Graham Dumpleton del artículo es la mejor que he encontrado en el MPM y mod_wsgi relacionados con la materia. Estoy bastante decepcionado de que nadie podría proporcionar alguna información sobre la depuración del uso de memoria en la misma aplicación, sin embargo.

Última Edición: Bien, he estado hablando de esto con Webfaction para ver si podían ayudar con volver a compilar el servidor Apache y este es su palabra sobre el asunto:

"Yo realmente no creo que usted vaya a recibir un beneficio por el cambio a un MPM Worker + mod_wsgi la instalación. Estimo que usted puede ser capaz de ahorrar alrededor de 20 MB, pero probablemente no mucho más que eso."

Así! Esto me lleva de vuelta a mi pregunta original (de la cual estoy todavía ninguno de los sabios acerca de). ¿Cómo identificar si los problemas de la mentira? Es bien conocida la máxima de que no optimizar sin pruebas para ver donde usted necesita para optimizar, pero hay muy poco en el camino de la tutoriales en la medición de Python uso de la memoria y ninguno específico para Django.

Gracias a todos los que se ayuda, pero creo que esta cuestión todavía está abierta!

Otra edición final ;-)

He preguntado esto en el django-lista de usuarios y de algunos muy útil respuestas

Honestamente la última actualización de la historia!

Esto se acaba de publicar. Podría ser la mejor solución: Perfiles de Django tamaño del objeto y el uso de la memoria con Pympler

49voto

nosklo Puntos 75862

Asegúrese de no mantener global de referencias a los datos. Que impide que el python recolector de basura de la liberación de la memoria.

No use mod_python. Carga un intérprete dentro de apache. Si usted necesita usar apache, use mod_wsgi lugar. No es difícil de cambiar. Es muy fácil. mod_wsgi es la forma más fácil de configurar para django que el cerebro muerto- mod_python.

Si se puede quitar apache a partir de sus requerimientos, que sería aún mejor a su memoria. spawning parece ser el nuevo rápidamente escalable para ejecutar python aplicaciones web.

EDIT: no veo cómo cambiar a mod_wsgi podría ser "complicado". Debe ser una tarea muy fácil. Sírvanse explicar en detalle el problema que está teniendo con el interruptor.

28voto

Van Gale Puntos 21982

Si está ejecutando bajo mod_wsgi, y, presumiblemente, de desove, ya que es compatible con WSGI, puede utilizar Cargadores para mirar a su uso de memoria.

Bajo mod_wsgi añadir en la parte inferior de su WSGI secuencia de comandos:

from dozer import Dozer
application = Dozer(application)

A continuación, apunte su navegador a http://domain/_dozer/index para ver una lista de todas las asignaciones de memoria.

Voy a añadir mi voz de apoyo para mod_wsgi. Se hace un mundo de diferencia en términos de rendimiento y uso de memoria de más de mod_python. Graham Dumpleton de apoyo para mod_wsgi es sobresaliente, tanto en términos de desarrollo activo y ayudar a las personas en la lista de correo para optimizar sus instalaciones. David Cramer en curse.com ha publicado algunos de los gráficos (que me parece que no puede encontrar ahora por desgracia) que muestra la drástica reducción en el uso de cpu y memoria después de cambiar a mod_wsgi en que sitio de alto tráfico. Varios de los desarrolladores de django han cambiado. En serio, es una obviedad :)

14voto

Pankrat Puntos 2145

Estos son los Python memoria del analizador de soluciones que conozco (no relacionados con Django):

Descargo de responsabilidad: tengo una estaca en el último.

El proyecto individual de la documentación debería darle una idea de cómo utilizar estas herramientas para analizar el comportamiento de la memoria de aplicaciones Python.

El siguiente es un buen "historia de la guerra", que también da algunos consejos útiles:

5voto

zgoda Puntos 8549

Además, verifique si no utiliza ninguno de fugas conocidas. MySQLdb es conocido por filtrar enormes cantidades de memoria con Django debido a errores en el manejo de unicode. Aparte de eso, Barra de herramientas de depuración de Django puede ayudarle a localizar los cerdos.

4voto

Carl Meyer Puntos 30736

Además de no mantener alrededor de globales referencias a objetos de datos de gran tamaño, intente evitar cargar grandes conjuntos de datos en memoria en todo siempre que sea posible.

Cambie a mod_wsgi en modo demonio y oprimiendo trabajador mpm de Apache prefork. Este último paso puede permitir atender a muchos usuarios concurrentes más con mucho menos sobrecarga de memoria.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X