NGINX + uWSGI +烧瓶。 有些请求非常慢

我们正在运行一个相当大的Flask应用程序,发现在随机的时候,我们会得到一个非常缓慢的请求(有时一分钟或更多)

我认为这个问题与延迟加载模块有关,而慢速请求则是当新工作者需要启动或重新加载时。 (我们原来有Apache + mod_wsgi的这个问题,但是决定尝试使用uWSGI,因为它是对工作者的先行工作)。 但即使重装不一致。 通常我可以重新加载,请求有点慢,但不显着。

我知道延迟加载是在Django中的东西,但据我所知文档Flask不这样做,除非它configuration为。 我不知道为什么请求会继续这么慢。

为了增加神秘感,我在EC2后面运行这个负载平衡器(仅仅用一个实例)。 通过负载均衡器连接时,我似乎遇到了比直接连接时更多的问题,但又是随机的。 通过负载平衡器的大多数请求不会超过10ms左右。

这里有各种configuration:

nginx的:

server { listen 80; server_name dev.mysite.net root /var/www/mysite; location / { include uwsgi_params; uwsgi_pass unix:/var/run/uwsgi/mysite.sock; } } 

uWSGI(皇帝pipe理)

 [uwsgi] base = /usr app = my_app.py pythonpath = /usr/lib/python2.7 pythonpath = /usr/lib/python2.7/site-packages pythonpath = /usr/lib/python2.7/dist-packages pythonpath = /var/www/mysite socket = /var/run/uwsgi/%n.sock module = %(app) callable = app logto = /var/log/uwsgi/%n.log workers=10 enable-threads = 1 

编辑:我遇到的一件事是保持活动超时设置可能会导致问题,而且似乎挂起等待几秒钟比保持活动超时。 这似乎有帮助,但没有完全解决,特别是通过负载平衡器的请求。

想想这个问题:

问题是ELB中的可用区域。 我以为我必须有一个可用区域设置为我的实例的实际位置,然后至less有一个公共区域(实例所在的区域是私有的)。

显然,实例在哪里并不重要,只有可用区域需要全部公开。 在同一个可用区中创build一个公有子网,即使这个实例本身位于一个私有子网上,也可以神奇地工作。