使用Tornado 4和Gunicorn设置新遗物时工人超时

时间:2017-01-17 05:28:22

标签: tornado gunicorn newrelic

我正在尝试用我的gunicorn + tornado 4 app配置新遗物。

在本地,没有gunicorn(并且只是使用龙卷风作为WSGI服务器),新的遗物设置工作,我可以在新遗物中看到数据。我使用以下代码配置新的遗留代理:

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命令,那么工作人员就会稳定并且不会超时。

尽管将日志级别设置为DEBUG,但我无法找到为什么gunicorn worker正在超时并无限期重启的根本原因。我所知道的是,上面的新遗留代理代码是罪魁祸首。

由于我能够在本地成功地与New Relic集成,我怀疑我的newrelic.ini和上面的新relic代理代码都没问题。 Gunicorn在某种程度上搞砸了,但现在确定我应该如何或在哪里开始排除故障。

我正在使用:

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

1 个答案:

答案 0 :(得分:0)

哇,它最终成了记忆问题。当我产生1个工人而不是3个时,一切正常。新的文物仪器只是在边缘上几乎没有减少我的内存使用量。