uWSGI工作人员都很忙,但每秒请求量很低

时间:2018-03-12 23:38:08

标签: nginx flask uwsgi

我在优化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统计信息的屏幕截图:

uWSGI Stats

正如您所看到的,每秒的请求数量极低,但工作人员仍然很忙。

top命令显示我的服务器利用率极低

top

与此同时,Nginx正在吐出数千个错误,例如:

*5151324 upstream timed out (110: Connection timed out) while connecting to upstream

如果有人可以帮我诊断,那将非常感激。

2 个答案:

答案 0 :(得分:0)

我有一个类似的问题,尽管所有工人都闲着,我的听众队列却在增加,并且RPS很低。

有很多潜在原因

  • net.ipv4.ip_conntrack_max不够高
  • net.core.somaxconn不够高
  • ulimit不够高
  • uwsgi-听得不够高
  • nginx worker进程过低
  • nginx工作者连接太低

如果这些都不起作用,那么您将需要检查日志,以确认对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

问题已经解决,也许是参考,也许不是类似的原因,希望对您有所帮助。