Почему Django FCG просто умереть? Как я могу узнать? - PullRequest
6 голосов
/ 08 апреля 2010

Я использую Django в Linux, используя fcgi и Lighttpd. Время от времени (примерно раз в день) сервер просто умирает. Я использую последнюю стабильную версию Django, Python и Lighttpd.

Единственное, о чем я могу думать, это то, что моя программа открывает много файлов и выполняет много внешних процессов, но я вполне уверен, что эта сторона является водонепроницаемой.

Глядя на журналы ошибок и доступа, ничего особенного не происходит (т. Е. Нагрузка не превышает норму). В тех случаях, когда у меня были исключения из Python, они появлялись в файле error.log, но когда происходил этот сбой, я ничего не получал.

Есть ли способ узнать, почему процесс умер? Если не считать записи логирования в каждой строке? Очевидно, я не могу воспроизвести это, поэтому я точно не знаю, где искать.

Редактировать

Это процесс Джанго, который умирает. Я использую сервер с manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

Ответы [ 3 ]

2 голосов
/ 09 апреля 2010

Вы можете отредактировать manage.py, чтобы перенаправить stderr в файл, предполагая, что runfcgi не делает этого сам:

import sys
if sys.argv[1] == "runfcgi":
    sys.stderr = open("/path/to/my/django-error.log", "a")
0 голосов
/ 19 апреля 2010

Были те же проблемы. Мало того, что они умирают без предупреждения или по причине, что они протекают как сумасшедшие, так как потоки застревают без главного процесса. Мы решили эту проблему, выполняя cronjob каждые 5 минут, который проверяет, работает ли номер порта и работает ли он, а если нет, перезапустите.

Кстати, теперь мы (медленно мигрируя) отказались от fcgi и перешли к uwsgi.

0 голосов
/ 16 апреля 2010

Это на вашем сервере? (У вас есть коробка?). У меня была такая проблема на виртуальном хостинге, и хост просто убивал длинные процессы. Знаете ли вы, если ваш fcgi получает SIGTERM?

...