2010-02-19 17 views
24

Moví mi primer proyecto Django de DjangoEurope a Webfaction, y eso inició un problema que parecía una pérdida de memoria. Con cada solicitud individual, el uso de la memoria del proceso del servidor aumenta alrededor de 500kb. Nunca baja. Esto continúa hasta que Webfaction lo mata por usar demasiada memoria.El uso de la memoria Django aumenta con cada solicitud

Puedo ver esto claramente cuando actualizo la interfaz de administración de Django en mi navegador (aunque esto sucede con cada página, no solo con la interfaz de administración, aunque la interfaz de administración sería un buen caso de prueba, porque no hay ninguna código directamente allí). Con cada recarga de navegador, el uso de memoria aumenta unos cientos de kilobytes.

que comprobar la memoria mediante un comando sugerido por Webfaction:

ps -u publica -o rss,etime,pid,command 

Más sobre mi configuración:

  • Django 1.1 (estable)
  • estándar de la configuración Webfaction Django usando Apache y mod_wsgi
  • DEBUG conjunto a False
  • MySQLdb 1.2.2 de Webfaction, pero después de escuchar que tenía algunos problemas, probé la versión 1.2.3c. No ayudó.

Editar: que creó un proyecto de Django vacío - la configuración por defecto de Django, más django.contrib.admin base de datos vacía y fresca (tratado tanto con MySQL y PostgreSQL). Empecé a volver a cargar el administrador de Django en mi navegador y observé el uso de la memoria. Al principio vi que se producía el problema: el uso de memoria crecía después de cada recarga. Pero luego se estabilizó y dejó de crecer. Eso es consistente con cómo se comportó mi proyecto original en Django Europa. Desafortunadamente en Webfaction nunca parece estabilizarse (o al menos no dentro de los límites de memoria disponibles para mi cuenta). ¿Algún consejo?

+0

Si está haciendo algo con fugas en sus modelos, sin duda aparecerá en el administrador, por lo que no estoy seguro de haber eliminado su código como culpable.Por lo que vale, he estado ejecutando una aplicación Django en Webfaction durante más de un año y no he tenido un problema como este. –

Respuesta

12

Me temo que no tengo ninguna respuesta definitiva. Los consejos de Graham Dumpleton fueron de gran ayuda, pero lamentablemente no respondió (solo comenta), por lo que no hay manera de aceptar su respuesta.

pesar de que todavía no han resuelto totalmente el problema, aquí hay algunos consejos básicos para otras personas que tienen problemas similares:

+0

El enlace a la publicación de webfaction está roto – Olli

+1

@Olli gracias. Actualicé (y amplié) enlaces a Webfaction. –

1

Tengo los mismos problemas con webfaction.

El método que uso, y que webfaction me dijo que debería seguir usando, es ejecutar un trabajo cron que comprueba la memoria cada 5 minutos más o menos, y reinicia las aplicaciones que están fuera de control.

De las 4 aplicaciones de python en webfaction, un promedio de 4 reinicios por día.

+0

Eso apesta. En DjangoEurope todo funcionó bien. Tiene que haber una solución real ... –

+2

Suena como algo cuestionable con su entorno si recomiendan a los usuarios reiniciar manualmente los procesos activos. – jathanism

0

También he tenido problemas con la memoria en Webfaction; sin embargo, en realidad no surgieron hasta que agregué mi quinta aplicación. Probé algunos ajustes en mis configuraciones de apache, pero lo que finalmente funcionó para mí fue cambiar a mod_wsgi.

+0

Yo uso mod_wsgi ya :( –

+2

¿Pero estás usando el modo daemon de mod_wsgi, o estás tratando de ejecutar todo en modo incrustado de mod_wsgi? Incluso con la configuración de WebFaction manteniendo los procesos hijo del servidor Apache en 2, si el modo incrustado todavía tomará más memoria que modo daemon con un proceso para la instancia Django. –

+0

@Graham - gracias. Actualicé mod_wsgi a 3.1 (de 2.5 proporcionado por webfaction) y eso pareció ayudar un poco (por primera vez vi instancias de uso de memoria en realidad) un poco). Luego cambié a un modo daemon, pero no noté mucha diferencia. Me siento un poco intimidado por las opciones de configuración. Tengo mi 'ServerLimit' establecido en" 2 ",' MaxRequestsPerChild' en " 500 ",' WSGIDaemonProcess' a "[mydomain] processes = 2 inactivity-timeout = 1800 threads = 15" y 'WSGIRestrictEmbedded' activados. ¿Tiene sentido esta configuración? –

0
+0

Comencé analizando cuidadosamente esos consejos. Sirvo archivos estáticos de la manera que se recomienda (lo revisé al menos cinco veces durante los últimos dos días;]). No sabía sobre el guión. Gracias. –

+0

Si solo tiene una aplicación ejecutándose, es bastante fácil evitar problemas. Creo que de hecho reinician su aplicación de vez en cuando. Pero cuando obtienes cuatro aplicaciones en una sola cuenta, entonces es bastante fácil comenzar a alcanzar tu límite, especialmente cuando webfaction es tacaño con la memoria y no te permite comprar más de 240 MB más o menos por cuenta. –

+0

Mm .. no sabía que webfaction estaba limitando la memoria que puede comprar ... gracias. –

1

me gustaría sugerir que no adivinar.

Eche un vistazo a http://code.google.com/p/django-dowser/, es una aplicación muy útil para detectar fugas de memoria y descubrir qué partes de su código son responsables del consumo de memoria.

0

¿Están ambos módulos mod_python y mod_wsgi cargados en apache?

Sé que a mod_wsgi no le gusta tener mod_python en su edificio. Comprueba que no esté cargado.

+1

Uno puede usar mod_python y mod_wsgi juntos bien, no es que a mod_wsgi no le guste. Simplemente pierdes algunas opciones de configuración para mod_wsgi ya que mod_python es responsable de inicializar Python, no mod_wsgi. Además, mod_python tiene fugas de memoria incluso si está habilitado en Apache pero no se usa. Esa pérdida de memoria solo se convierte en un problema si se reinician muchos Apache y no es algo que ocurra en cada solicitud. –

1

Compruebe si el back-end de memoria caché en proceso está habilitado, si es así, ese podría ser el problema (nuevas entradas de caché en cada solicitud).

+0

No lo es. Uso memcached ahora (usa su propio proceso, que crece por separado), pero apagar el almacenamiento en caché no almacena nada en el caché. –

2

Tuvimos un problema similar en Webfaction, pero resultó que no era debido a ellos en absoluto . Hay un error en Django sobre el uso de memoria alta cuando se utiliza el mapa del sitio con muchos elementos: http://code.djangoproject.com/ticket/11572

Cuando eliminamos el mapa del sitio ya no dispara 90 Mb en el momento. Solo pensé que debería mencionarlo, ya que llevó mucho tiempo usarlo para resolver problemas.

Cuestiones relacionadas