uwsgi 长时间处理一个请求,导致网站不可用?

3 篇文章 0 订阅
3 篇文章 0 订阅

https://www.v2ex.com/amp/t/396206

场景:
nginx + uwsgi + django

uwsgi 配置了 4 个 worker,偶尔网站会打不开,装了一些 trace 工具分析后,发现不可用的时候,uwsgi 中的 1 个或者 2 个 worker,都是在处理一些耗时的任务,比如 requests 请求第三方 api。

所以表面上看好像是因为:某个 uwsgi worker 因为在处理某个耗时请求,然后某些 http request 如果正好分配到这个 uwsgi,那就不可用了?

但是另外还有 2 个 worker 是 idle 状态的呀,明明是可以提供工作的

解答
你 trace 后才发现还有两个 backend 可用,可是 nginx 怎么知道呢……默认的策略就是轮询呀

  1. 你需要先解决那个长耗时请求的问题(合理设置超时,或者解决慢查询的问题),一共就 4 个 worker,hang 住了 2 个,50%的处理能力就没有了,这种严重影响吞吐的问题是根本问题
  2. 如果认为这样的情况是符合你的预期的,那么处理一下 nginx 的超时,因为上一个从 nginx 来的请求可能已经因为超时断开了,nginx 认为后端已经是 idle 的状态,于是又把请求发给了这个 backend,调整一下超时,让 nginx 的超时大于你这个场景的处理时间
  3. 如果还认为这种情况是符合你的预期的…… proxy 还有配置重试的指令,但不解决上面长耗时的问题,大概率的可能是把 4 个 worker 都变成 hang 住的状态,这个时候重启服务解决一切问题……最终还是要回到 1
    简单看一下雪崩和吞吐量相关的介绍就大致明白这个模型了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值