EC2上的Gunicorn在外部调用时会继续提供WORKER TIMEOUT

时间:2014-06-04 00:44:07

标签: python amazon-ec2 ubuntu-12.04 gunicorn

我正试图让我的烧瓶应用程序在nginx前面的gunicorn上运行。我想在我去的时候测试一些东西,所以我在内部和外部使用烧瓶开发服务器来完成所有工作。然后我开始起枪,累了。对/ status的简单调用,返回'running'工作,但工作人员保持超时并重新启动。

我卷起袖子,开始简化。我现在可以用一个简单的wsgi脚本重现这个:

def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return ["Hello!"]

我拥有的gunicorn命令行是:

var/www/py_api/app/var/www/py_api/venv/bin/python /var/www/py_api/venv/bin/gunicorn -b <private_IP>:4000  test_server

我尝试使用类似的结果绑定到0.0.0.0。绑定到127.0.0.1仅在内部工作,但不会重现问题。

我在默认VPC中的EC2媒体上运行Ubuntu 12.04上的所有内容。

我正在运行virtualenv的一切。这是点子冻结输出:

Babel==1.3
Flask==0.10.1
Flask-Babel==0.9
Flask-Login==0.2.10
Flask-Mail==0.9.0
Flask-SQLAlchemy==1.0
Flask-User==0.4.9
Flask-WTF==0.9.5
Jinja2==2.7.2
MarkupSafe==0.21
SQLAlchemy==0.9.4
WTForms==1.0.5
Werkzeug==0.9.4
argparse==1.2.1
awscli==1.3.11
bcdoc==0.12.2
blinker==1.3
botocore==0.45.0
colorama==0.2.5
docutils==0.11
hashids==1.0.0
itsdangerous==0.24
jmespath==0.4.1
oursql==0.9.3.1
passlib==1.6.2
py-bcrypt==0.4
pyasn1==0.1.7
pycrypto==2.6.1
python-dateutil==2.2
pytz==2014.2
requestes==0.0.1
requests==2.3.0
rsa==3.1.2
six==1.6.1
speaklater==1.3
virtualenv==1.11.4
wsgiref==0.1.2

我不愿意继续使用nginx,直到我解决了这个问题。

综述: 如果我在当地卷曲一切都很好。如果我从外部卷曲,无论是通过ELB还是直接到机器,我都会超时。这不仅仅是卷曲。

理论: 我已准备好了解Gunicorn和elbs的问题,我想知道将所有ec2实例放入至少一个默认vpc的更改是否意味着任何外部流量都通过透明的elb。

1 个答案:

答案 0 :(得分:0)

尝试根据您的要求添加超时值。 在您的服务文件(/etc/systemd/system/your_app.service)中,将新参数-t 900添加到ExecStart

下面提到的例子

ExecStart=/home/ubuntu/anaconda3/envs/env_name/bin/gunicorn --error-logfile ./error.log -w 4 --access-logfile ./access.log -t 900 -b unix:app_name.sock -m 007 wsgi:app

有关更多信息,请查看此链接http://docs.gunicorn.org/en/stable/settings.html#timeout了解更多信息。