¿Cómo puedo investigar estos bloqueos misteriosos de Django?

Un sitio de Django (alojado en Webfaction) que recibe alrededor de 950 499 páginas vistas al mes está experimentando bloqueos que no he podido averiguar cómo depurar. A intervalos impredecibles (con un promedio de una vez al día, pero no a la misma hora todos los días), todas las solicitudes al sitio comienzan a colgarse o a expirar, lo que hace que el sitio sea totalmente inaccesible hasta que reiniciamos Apache. Estas solicitudes aparecen en los registros de acceso de frontend como XNUMX, pero no aparecen en los registros de nuestra aplicación.

Al examinar detenidamente los registros del servidor (incluidos los generados por django-timelog), parece que no puedo encontrar ningún patrón en el que las páginas se accedan justo antes de que el sitio se caiga. Para el bloqueo más reciente, todas las páginas que se visitan justo antes de que el sitio se cayera parecen ser operaciones estándar de procesamiento a respuesta que utilizan plantillas que parecen bastante sencillas y funcionan bien el resto del tiempo. Las solicitudes justo antes del bloqueo no parecen demorar más según el registro de tiempo, y no he podido replicar los bloqueos intencionalmente a través de pruebas de carga.

Webfaction dice que no se trata de sobrepasar nuestro uso de memoria permitido o, de lo contrario, nos notificarían. Una cosa a tener en cuenta es que la base de datos no se reinicia (solo la aplicación/Apache) cuando recuperamos el sitio.

¿Cómo investigaría este tipo de problema recurrente? Parece que debe haber una línea de código en alguna parte que está colgando. ¿Tiene alguna sugerencia sobre un proceso para encontrarla?

preguntado el 03 de mayo de 12 a las 20:05

¿Qué dependencias externas tiene su sitio? ¿Utiliza una API que a veces es inalcanzable? ¿Tienes un bucle infinito en alguna parte? Podría ser cualquier cantidad de cosas, dependiendo de cuán compleja sea su aplicación. -

He disfrutado bastante más con gunicorn en webfaction que con apache. Es posible que desee probar eso: también tiene más herramientas de depuración para cuando esté desesperado (incluida la capacidad de rastrear cada línea de código en los módulos seleccionados). -

2 Respuestas

Una vez tuve algunos problemas como este, y básicamente se redujo a mi falta de comprensión de la seguridad de subprocesos dentro del middleware Django. Básicamente, el middleware django es, creo, un singleton que se comparte entre todos los subprocesos, y estos subprocesos se agitaban con los valores establecidos en una clase de middleware personalizada que tenía. Mi solución fue reescribir mi middleware para no usar atributos de instancia o clase que cambiaron, y cambiar las partes críticas de mi aplicación para no usar subprocesos en absoluto con mi servidor uwsgi, ya que parecían ser una desventaja de rendimiento general para mi aplicación. Las configuraciones de uwsgi con subprocesos parecen funcionar mejor cuando tiene vistas que pueden completarse en diferentes intervalos (algunas vistas de ejecución prolongada y otras rápidas).

contestado el 04 de mayo de 12 a las 03:05

Dado que realmente no puede describir cuáles son las condiciones de falla hasta que pueda replicar el bloqueo, es posible que deba forzar la situación con ab (punto de referencia de apache). Si no desea hacer esto con su sitio de producción, puede replicar el sitio en un subdominio. Advertencia: ab puede vencer a la mierda siempre amorosa de un servidor, así que RTM. También es posible que desee avisar a los administradores de WF sobre lo que va a hacer.

Actualización para comentario:

Estaba sugiriendo usar el exactamente la misma maquina de modo que el nombre del subdominio era la única diferencia. Dado que usaste una diferente máquina hay una gran cantidad de cosas ambientales sutiles (y no tan sutiles) que podrían evitar que se manifieste el error. Si la nueva máquina está bien, y si está dispuesto a alejarse del problema sin resolverlo, simplemente puede convertirla en su máquina de producción y ser feliz. Personalmente, tiendo a obsesionarme con cosas como esta, pero también estoy jubilado y tengo mucho tiempo para jugar con los dedos de los pies. :-)

Respondido 17 Feb 13, 06:02

¡Gracias por la sugerencia! Configuré un subdominio hace un par de días para realizar pruebas de carga de la aplicación en otra máquina WF (e incluso ejecuté pruebas de carga en el sitio principal durante las horas de poco uso), pero no pude bloquearlo. (Estaba usando blitz.io en lugar de ab, pero estoy abierto a usar cualquier herramienta). Como no pude bloquearlo con la carga, mi pensamiento actual fue que debe ser una línea específica de código que está colgando. - nombre de usuario deseado

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.