2015-05-09 2 views
10

Я использую Gunicorn для обслуживания приложения Django, он работал нормально, пока я не изменил свой тайм-аут с 30 до 900000, я должен был сделать это, потому что у меня был usecase, в котором огромный файл, необходимый для загрузки и обрабатывается (в некоторых случаях обрабатывается более 30 м), но после этого изменения Гуникорн не реагирует через несколько часов, я думаю, проблема в том, что все рабочие (будучи 30) будут заняты некоторыми запросами после этого количества времени, это происходит, даже если я не запускаю этот длинный запрос вообще, и это происходит с обычным исследованием в admin django. Я хочу знать, есть ли способ отслеживать запросы на пулеметы и видеть, что рабочие заняты тем, что просит, я хочу узнать запросы, которые делают их занятыми. Я пробовал --log-file=- --log-level=debug, но он ничего не говорит о запросах, мне нужны более подробные журналы.Gunicorn не отвечает

+0

Моя догадка заключается в том, что в некоторых из ваших запросов обрабатывается код. При 30-секундном таймауте пострадавшие работники в конечном итоге освободятся. С 0,9 мегасекундным таймаутом они фактически не будут. –

+0

Понятно, вот почему мне нужны журналы, чтобы узнать, что происходит. – Sassan

ответ

3

Из последних Gunicorn документы, на CMD линии/скрипт вы можете использовать:

--log-file - ("-" means log to stderr) 
--log-level debug 

или в конфигурационном файле вы можете использовать:

errorlog = '-' 
accesslog = '-' 
loglevel = 'debug' 

но нет никакого упоминания о параметров, которые вы указали в своем запросе:

--log-file=- 
--log-level=debug 

Запись по умолчанию для доступа - «Нет» ()), поэтому выстрелил в темноте, но это может объяснить, почему не получают подробную информацию журнала. Вот sample config file от источника Gunicorn, и последний Gunicorn config docs.

Кроме того, вы можете ознакомиться с changing your logging configuration в Django.

+0

--log-file = - эквивалентен файлу -log - он показывает много журналов, но не подробные журналы, которые я хочу. Мне нужно знать, сколько времени требуется каждый запрос для обработки на сервере. – Sassan

-1

Хотя я также ищу хороший ответ, чтобы узнать, сколько рабочих занято, вы решаете эту проблему неправильно. Для выполнения этой задачи вам понадобится рабочий, например Celery/RabbitMQ, для асинхронного поднятия тяжелой позиции, в то время как ваш цикл запроса/ответа остается быстрым.

У меня есть скрипт на моем сайте, который может занять 5 + минуты, а вот хороший шаблон я использую:

  1. Когда запрос первым приходит, нерест задачи и просто возвращает HTTP 202 принят. Его цель - «Запрос принят для обработки, но обработка не завершена».
  2. Сделайте свой опрос на уровне фронта той же конечной точкой (каждые 30 секунд должно быть достаточно). Пока задача не завершена, верните сообщение 202
  3. В конце концов, когда он завершит возврат 200, наряду с любыми данными, которые могут понадобиться интерфейсу.

Для моего сайта мы хотим обновить данные более 10 минут. Я передаю заголовок Accept-Datetime, чтобы указать, сколько лет данных является приемлемым. Если наша локальная кешированная копия старше этого, мы запускаем цикл задачи.

+0

Нет, это не всегда хорошее решение, «обычно» это правильно, но не всегда. Иногда логика заключается в том, чтобы заставить пользователя ждать, пока ответ не будет готов (как бы это ни потребовалось), и покажите ему ответ.В моем случае мне нужно было это сделать, и поэтому я спросил его здесь (во всяком случае, я не тот, кто проголосовал за ваш ответ) – Sassan

+0

Хорошо, конечно. Я предлагаю только ответ. Но как вы «заставляете пользователя ждать»? Что произойдет, если они нажмут обновление? Продолжается ли работа или начинается ли она. Если это будет продолжаться, как они получат обновление статуса? – user3681414

+0

Я только что создал учетную запись с Datadog. У них есть интеграция с оружием, что позволит вам увидеть, сколько рабочих занято против свободного. – user3681414

Смежные вопросы