2010-04-08 2 views
6

Je cours Django sous Linux en utilisant fcgi et Lighttpd. De temps en temps (environ une fois par jour) le serveur meurt juste. J'utilise la dernière version stable de Django, Python et Lighttpd. La seule chose à laquelle je peux penser, c'est que mon programme ouvre beaucoup de fichiers et exécute de nombreux processus externes, mais je suis à peu près sûr que tout est étanche. Si l'on regarde les journaux d'erreurs et d'accès, il n'y a rien d'exceptionnel (c'est-à-dire que la charge n'est pas supérieure à la normale). Dans les cas où j'ai eu des exceptions de Python, celles-ci sont apparues dans error.log, mais quand ce crash arrive, je n'ai rien.Pourquoi Django fcgi meurt-il? Comment puis-je savoir?

Y at-il un moyen de savoir pourquoi le processus est mort? À court de mettre des déclarations de notation sur chaque ligne? Évidemment je ne peux pas reproduire ceci donc je ne sais pas exactement où regarder.

Modifier

Il est le processus de django qui est en train de mourir. Je courais le serveur avec manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

+1

Avez-vous cherché des fichiers de base? Avez-vous défini vos limites pour autoriser les fichiers de base? – jemfinch

+0

Pouvez-vous simplement exécuter le serveur à partir de la ligne de commande, dans un mode de débogage non démonisant? –

+0

En relisant la question, une chose n'est pas entièrement claire: est-ce le démon lighttpd qui meurt, ou votre propre processus FastCGI? – Thomas

Répondre

2

Vous pouvez modifier manage.py pour rediriger stderr vers un fichier, en supposant runfcgi ne le fait pas lui-même:

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

Merci pour la suggestion. Je pense que comme je recevais diverses exceptions dans error.log de lighttpd (pour des raisons indépendantes), stderr est déjà connecté. Qu'il suffise de dire, le journal est vide lorsque le processus meurt. – Joe

0

Est-ce sur votre serveur? (Possédez-vous la boîte?). J'ai eu ce problème sur l'hébergement partagé, et l'hôte était en train de tuer de longs processus. Savez-vous si votre fcgi reçoit un SIGTERM?

+0

Savez-vous quel processus enverrait ces messages? C'est ma boîte [virtuelle]. J'ai quelques processus Django. C'est le seul qui meurt. – Joe

0

Avoir eu les mêmes problèmes. Non seulement ils meurent sans avertissement ou raison qu'ils fuient comme des fous aussi avec des fils bloqués sans un processus maître. Nous avons résolu ce problème en faisant exécuter un cronjob toutes les 5 minutes qui vérifie si le numéro de port est opérationnel et s'il ne redémarre pas. Par ailleurs, nous avons maintenant (lentement migré) abandonné sur fcgi et déplacé vers uwsgi.

+0

Je suis arrivé à la même conclusion mais avec un intervalle de 1 minute. Est-ce que uwsgi a résolu votre problème? – Joe

+0

Je ne sais pas encore. Je ne l'ai pas vu tomber en panne au moins. –

Questions connexes