【问题标题】:why uwsgi workers idle but nginx showed a lot of timeouts?为什么 uwsgi 工作人员空闲但 nginx 显示很多超时?
【发布时间】:2012-11-13 06:01:02
【问题描述】:

堆栈:nginx、uwsgi、django

uwsgitop 和 top 都显示 uwsgi worker 处于空闲状态,而 nginx 错误日志显示上游超时。

我认为某些请求需要大量资源,例如等待数据库或缓存,而其他请求则不需要。在检查了超时的请求后,大多数都不是贪婪的。任何类型的请求都已超时。

那么,如果其他人真的很忙,为什么 nginx 不将请求播种给空闲的请求呢?为什么 uwsgi master 只是让人忙而其他人闲着?

【问题讨论】:

  • 根据我的经验,nginx wsgi 实现的性能很差,特别是如果应用程序倾向于阻塞几毫秒。
  • 他们是一直这样做还是只在负载高时这样做?你的网站有很多 IO 吗?
  • @PauloScardine uwsgi 实际上在同步或异步方式下都工作得很好,虽然我不敢使用异步模式。我用芹菜代替。我以为 uwsig 也被阻塞了,但是其他工作人员处于空闲状态,所以它不可能是阻塞问题。
  • @RickyA 是的,负载和 IO 一直是问题所在,但我们随后解决了这些问题。之前DB IO非常高,经过一番调优,我去掉了高IO。
  • @PauloScardine 我想你说的是 nginx 的 mod_wsgi,一个完全不同的项目(现在也有不同的名称),因为 uWSGI 不在 nginx 进程地址空间中运行。

标签: django nginx uwsgi


【解决方案1】:

我想回答我自己的问题。

将内核参数:net.ipv4.ip_conntrack_max 从 65560 更改为 6556000

我有一个关于我们如何找到答案的完整故事:

  1. 用户说慢,慢,慢

  2. nginx 被“上游连接超时”淹没

  3. 我检查了uwsgi日志,发现了一些错误,修复了;发现更多,修复更多,这个循环持续了好几天。直到昨天,我还认为与 uwsgi、memcached、db、redis 或任何后端无关,因为 uwsgi 处于空闲状态

  4. 所以我认为 nginx 一定有问题,重新加载,重新启动,检查连接,workers,proxy_read_timeout 等等。没有运气。

  5. 检查了 ulimit -n,它报告了 1024,默认值。我有 8 个 nginx 工作人员,所以连接数应该达到 1024 * 8,我认为这可能没问题,因为 nginx 从来没有说过太多打开的文件。无论如何,我将其更改为 4096。没有运气。

  6. 检查连接数和状态,然后出现问题。上游连接都处于 syn_sent 状态,然后超时发生。 300 个连接中只有 2 或 3 个处于已建立状态。我们想知道为什么。我的一位朋友告诉我使用 tcpdump,这是我一次都不敢尝试的神奇工具。

  7. 然后我们去syslog,发现如下错误,终于解决了问题

【讨论】:

    【解决方案2】:

    我遇到了一个类似的问题,即我的侦听队列正在增长,尽管所有工作人员都处于空闲状态,但 RPS 仍然很低。

    samuel 发现了其中一种情况,但这种行为还有其他一些潜在原因:

    • net.core.somaxconn 不够高
    • uwsgi --listen 不够高
    • nginx 工作进程太低
    • nginx worker 连接太低

    如果这些都不起作用,那么您将需要检查您的日志,确认对 uWSGI 的入站请求在 http/1.1 而不是 http/1.0 下,然后使用 --http11-socket

    以下是我在处理这个问题时的一些发现:https://wontonst.blogspot.com/2019/06/squishing-performance-bug-in.html

    nginx 调优页面还有一些其他配置可能对解决这个问题有用,也可能没用: https://www.nginx.com/blog/tuning-nginx/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 2017-06-02
      • 1970-01-01
      • 2019-08-12
      • 2021-08-17
      • 2016-10-26
      • 2020-02-03
      • 1970-01-01
      相关资源
      最近更新 更多