我在优化uWSGI
以便为我的Flask
应用程序提供服务时遇到了一些麻烦,该应用程序每秒接收大约1500个请求。
我目前正在我的前置服务器上运行Nginx,在上游块中有四台服务器(每台服务器都是AWS m5-xlarge,因此有足够的计算能力)。前端服务器使用Web套接字连接到端口5000上的uWSGI服务器。我已经证实这一切都正常,Nginx能够处理负载。
这是我的uWSGI配置:
[uwsgi]
module = wsgi:app
master = true
processes = 24
threads = 4
enable-threads = True
socket = 0.0.0.0:5000
stats = api.stats.sock
chmod-socket = 660
vacuum = true
die-on-term = true
以下是每个服务器的典型uwsgitop
统计信息的屏幕截图:
正如您所看到的,每秒的请求数量极低,但工作人员仍然很忙。
top
命令显示我的服务器利用率极低。
与此同时,Nginx正在吐出数千个错误,例如:
*5151324 upstream timed out (110: Connection timed out) while connecting to upstream
如果有人可以帮我诊断,那将非常感激。
答案 0 :(得分:0)
我有一个类似的问题,尽管所有工人都闲着,我的听众队列却在增加,并且RPS很低。
有很多潜在原因
如果这些都不起作用,那么您将需要检查日志,以确认对uWSGI的入站请求位于http / 1.1之下,而不是http / 1.0下,然后使用--http11-socket
当我为这个问题而苦恼时,有一些发现:https://wontonst.blogspot.com/2019/06/squishing-performance-bug-in.html
答案 1 :(得分:0)
uWSGI所有工作人员忙,可能队列正在阻塞。检查数据库或其他花费大量时间的操作。
我遇到了类似您的问题,并且解决了Postgresql 12问题,连接数达到了上限。默认的max_connections为100。我将此配置更改为10000。
alter system set max_connections='10000';
然后重新启动数据库
systemctl restart postgresql-12
问题已经解决,也许是参考,也许不是类似的原因,希望对您有所帮助。