2010-04-08 5 views
6

Ich benutze Django unter Linux mit fcgi und Lighttpd. Hin und wieder (etwa einmal am Tag) stirbt der Server. Ich verwende die neueste stabile Version von Django, Python und Lighttpd.Warum würde Django fcgi einfach sterben? Wie kann ich es herausfinden?

Das einzige, was mir einfällt, ist, dass mein Programm eine Menge Dateien öffnet und viele externe Prozesse ausführt, aber ich bin ziemlich sicher, dass diese Seite der Dinge wasserdicht ist.

Betrachtet man die Fehler- und Zugriffsprotokolle, passiert nichts Außergewöhnliches (d. H. Die Last liegt nicht über dem Normalwert). In den Fällen, in denen ich Ausnahmen von Python hatte, wurden diese in der error.log angezeigt, aber wenn dieser Absturz passiert, bekomme ich nichts.

Gibt es eine Möglichkeit herauszufinden, warum der Prozess gestorben ist? Kurz, Logging-Anweisungen in jede einzelne Zeile zu schreiben? Natürlich kann ich das nicht reproduzieren, daher weiß ich nicht genau, wo ich suchen soll.

bearbeiten

Es ist das django Prozess, sterben wird. Ich bin mit den Server mit manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

+1

Haben Sie nach Kerndateien gesucht? Haben Sie Ihre Grenzwerte so festgelegt, dass Kerndateien zulässig sind? – jemfinch

+0

Können Sie den Server einfach über die Befehlszeile in einem nicht dämonischen Debug-Modus ausführen? –

+0

Wenn ich die Frage noch einmal lese, ist eines nicht ganz klar: Stirbt der Lighttpd-Daemon, oder ist es Ihr eigener FastCGI-Prozess? – Thomas

Antwort

2

Sie manage.py bearbeiten könnte stderr in eine Datei zu umleiten, runfcgi vorausgesetzt, tun nicht, dass selbst:

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

Danke für den Vorschlag. Ich denke, dass, als ich verschiedene Ausnahmen in lighttpd error.log (aus nicht verwandten Gründen) bekam, stderr bereits angemeldet ist. Es genügt zu sagen, dass das Protokoll leer ist, wenn der Prozess abbricht. – Joe

0

Ist dies auf dem Server? (Besitzen Sie die Box?). Ich hatte dieses Problem bei Shared Hosting und der Host hat gerade lange Prozesse beendet. Weißt du, ob dein fcgi ein SIGTERM erhält?

+0

Wissen Sie, welcher Prozess diese Nachrichten senden würde? Es ist meine [virtuelle] Box. Ich habe ein paar Django-Prozesse. Dies ist der einzige, der stirbt. – Joe

0

Hatte die gleichen Probleme gehabt. Nicht nur sterben sie ohne Vorwarnung oder Grund, dass sie wie verrückt auslaufen mit Threads, die ohne einen Meisterprozess stecken bleiben. Wir haben dieses Problem gelöst, indem wir alle 5 Minuten einen Cronjob ausführen lassen, der überprüft, ob die Portnummer aktiv ist und nicht neu startet.

Übrigens haben wir jetzt (langsam migriert) auf fcgi aufgegeben und sind zu uwsgi übergegangen.

+0

Ich kam zu dem gleichen Schluss, aber mit einem 1-Minuten-Intervall. Hat uwsgi dein Problem gelöst? – Joe

+0

Weiß ich noch nicht. Habe es zumindest noch nicht zum Absturz gebracht. –

Verwandte Themen