Рабочие таймауты при настройке New relic с Tornado 4 и Gunicorn

Я пытаюсь настроить new relic с моим приложением gunicorn + tornado 4.

Локально, без gunicorn (и просто используя tornado в качестве сервера WSGI), настройка new relic работает, и я могу видеть данные в new relic. Для настройки агента new relic используется следующий код:

config_file = os.environ.get('NEW_RELIC_CONFIG_FILE', None)
if config_file:
  import newrelic.agent
  environment = 'production' if IS_PROD else 'development'
  newrelic.agent.initialize(config_file, environment=environment)

Однако, на производстве, с gunicorn, я получаю бессрочные рабочие тайм-ауты:

gunicorn -b 0.0.0.0:8080 -w 3 -p gunicorn.pid -k tornado --access-logfile /var/log/gunicorn_access.log --error-logfile /var/log/gunicorn_error.log myapp.server:make_application() -t 2 --log-level DEBUG --capture-output &> /dev/null &

[2017-01-17 05:16:37 +0000] [26957] [CRITICAL] WORKER TIMEOUT (pid:26985)
[2017-01-17 05:16:37 +0000] [26957] [CRITICAL] WORKER TIMEOUT (pid:26986)
[2017-01-17 05:16:37 +0000] [26957] [CRITICAL] WORKER TIMEOUT (pid:26987)
[2017-01-17 05:16:37 +0000] [26991] [INFO] Booting worker with pid: 26991
[2017-01-17 05:16:37 +0000] [26992] [INFO] Booting worker with pid: 26992
[2017-01-17 05:16:37 +0000] [26993] [INFO] Booting worker with pid: 26993
[2017-01-17 05:16:40 +0000] [26957] [CRITICAL] WORKER TIMEOUT (pid:26992)
[2017-01-17 05:16:40 +0000] [26957] [CRITICAL] WORKER TIMEOUT (pid:26993)
[2017-01-17 05:16:40 +0000] [26957] [CRITICAL] WORKER TIMEOUT (pid:26991)
[2017-01-17 05:16:40 +0000] [26997] [INFO] Booting worker with pid: 26997
[2017-01-17 05:16:40 +0000] [26998] [INFO] Booting worker with pid: 26998
[2017-01-17 05:16:40 +0000] [26999] [INFO] Booting worker with pid: 26999

Если я комментирую код агента выше и выполняю команду gunicorn, рабочие стабильны и не тайм-аут.

Несмотря на установку уровня журнала для отладки, я не могу найти первопричину того, почему gunicorn worker отсчитывает время и перезагружается бесконечно. Все, что я знаю, это то, что код агента new relic выше является виновником.

Поскольку я могу успешно интегрироваться с New Relic локально, я подозреваю, что мой newrelic.ini и код агента new relic выше хороши. Gunicorn как-то портит вещи, но теперь уверен, как или где я должен начать устранять неполадки.

Я использую:

newrelic==2.78.0.57
gunicorn==19.6.0
tornado==4.4

1 ответ

  1. Ничего себе, это закончилось проблемой памяти. Когда я порождаю 1 работника вместо 3, все работает. New relic instrumentation едва ли перевешивала использование моей памяти.