2010-04-08 17 views
6

Używam Django na Linuksie, używając fcgi i Lighttpd. Co jakiś czas (mniej więcej raz dziennie) serwer po prostu umiera. Używam najnowszej stabilnej wersji Django, Python i Lighttpd.Dlaczego Django fcgi po prostu umrzeć? Jak mogę się dowiedzieć?

Jedyne, co mogę myśleć to to, że mój program otwiera wiele plików i wykonuje wiele zewnętrznych procesów, ale jestem dość pewny, że strona jest szczelna.

Patrząc na błędy i dzienniki dostępu, nie dzieje się nic wyjątkowego (tj. Obciążenie nie przekracza normalnego poziomu). Przy tych okazjach, w których miałem wyjątki od Pythona, pojawiły się one w pliku error.log, ale gdy nastąpi ta awaria, nic nie dostaję.

Czy istnieje sposób dowiedzenia się, dlaczego proces się zakończył? Brak instrukcji rejestrowania w każdej linii? Oczywiście nie mogę tego odtworzyć, więc nie wiem dokładnie, gdzie szukać.

Edit

To proces Django że umiera. Używam serwera z manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

+1

Szukasz podstawowych plików? Czy ustawiłeś ograniczenia, aby zezwalać na pliki podstawowe? – jemfinch

+0

Czy możesz po prostu uruchomić serwer z wiersza poleceń, w trybie demona nie demonizującym? –

+0

Ponownie czytając pytanie, jedna rzecz nie jest całkiem jasna: czy jest to demon lighttpd umierający, czy też własny proces FastCGI? – Thomas

Odpowiedz

2

Można edytować manage.py przekierować stderr do pliku, zakładając runfcgi nie robi, że sama:

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

Dzięki za sugestię. Myślę, że gdy otrzymywałem różne wyjątki w pliku error.log lighttpd (z niezwiązanych z nim przyczyn), stderr jest już zalogowany. Wystarczy powiedzieć, dziennik jest pusty, gdy proces umiera. – Joe

0

Czy to na serwerze? (posiadasz pudełko?). Miałem problem z dzielonym hostingiem, a gospodarz po prostu zabijał długie procesy. Czy wiesz, czy twój fcgi otrzymuje SIGTERM?

+0

Czy wiesz, jaki proces będzie wysyłał te wiadomości? To jest moje [wirtualne] pudełko. Mam kilka procesów Django. To jedyny umierający. – Joe

0

Miałem takie same problemy. Nie tylko umierają bez ostrzeżenia i powodu, że przeciekają jak szaleni, a nici tkwią bez głównego procesu. Rozwiązaliśmy ten problem, uruchamiając cronjob co 5 minut, który sprawdza, czy numer portu jest uruchomiony i czy nie jest uruchamiany ponownie.

Nawiasem mówiąc, teraz (powoli migrujemy) poddaliśmy się fcgi i przenieśliśmy się do uwsgi.

+0

Doszedłem do tego samego wniosku, ale z interwałem 1-minutowym. Czy uwsgi rozwiązało twój problem? – Joe

+0

Nie wiem jeszcze. Nie widziałem jeszcze co najmniej awarii. –

Powiązane problemy