2010-04-08 11 views
6

Estoy ejecutando Django en Linux usando fcgi y Lighttpd. De vez en cuando (una vez al día) el servidor simplemente muere. Estoy usando la última versión estable de Django, Python y Lighttpd.¿Por qué Django fcgi acaba de morir? ¿Cómo puedo averiguarlo?

Lo único que puedo pensar es que mi programa está abriendo una gran cantidad de archivos y ejecutando muchos procesos externos, pero estoy bastante seguro de que ese lado de las cosas es hermético.

Al mirar el error y acceder a los registros, no ocurre nada excepcional (es decir, la carga no es superior a lo normal). En esas ocasiones en las que he tenido excepciones de Python, estas han aparecido en el error.log, pero cuando ocurre este bloqueo no obtengo nada.

¿Hay alguna forma de descubrir por qué murió el proceso? ¿Demasiado para poner declaraciones de registro en cada línea? Obviamente no puedo reproducir esto, así que no sé exactamente dónde mirar.

Editar

Es la django proceso que se está muriendo. Estoy corriendo el servidor con manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

+1

¿Has buscado los archivos principales? ¿Ha establecido sus límites para permitir los archivos centrales? – jemfinch

+0

¿Puedes simplemente ejecutar el servidor desde la línea de comandos, en un modo de depuración no demoniativo? –

+0

Volviendo a leer la pregunta, una cosa no está del todo clara: ¿está muriendo el daemon lighttpd o su propio proceso FastCGI? – Thomas

Respuesta

2

Se puede editar manage.py para redirigir stderr a un archivo, asumiendo runfcgi no hace eso sí:

import sys 
if sys.argv[1] == "runfcgi": 
    sys.stderr = open("/path/to/my/django-error.log", "a") 
+0

Gracias por la sugerencia. Creo que como estaba obteniendo varias excepciones en lighttpd's error.log (por razones no relacionadas), stderr ya está registrado. Baste decir que el registro está vacío cuando el proceso muere. – Joe

0

Es esto en su servidor? (¿Eres el propietario de la caja?). Tuve ese problema en el alojamiento compartido, y el host solo estaba matando procesos largos. ¿Sabes si tu fcgi está recibiendo un SIGTERM?

+0

¿Sabe qué proceso sería enviar esos mensajes? Es mi caja [virtual]. Tengo un par de procesos de Django. Este es el único que está muriendo. – Joe

0

Han tenido los mismos problemas. No solo mueren sin previo aviso o la razón por la que se filtran como locos también con los hilos atascados sin un proceso maestro. Solucionamos este problema haciendo que cronjob se ejecute cada 5 minutos, que comprueba si el número de puerto está funcionando y si no se reinicia.

Por cierto, ahora (hemos migrado lentamente) renunciamos a fcgi y nos trasladamos a uwsgi.

+0

Llegué a la misma conclusión, pero con un intervalo de 1 minuto. ¿Uwsgi resolvió tu problema? – Joe

+0

No lo sé aún. No lo he visto colapsar todavía al menos. –

Cuestiones relacionadas