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

2024-06-18 11:18

本文主要是介绍uwsgi 长时间处理一个请求,导致网站不可用?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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
    简单看一下雪崩和吞吐量相关的介绍就大致明白这个模型了

这篇关于uwsgi 长时间处理一个请求,导致网站不可用?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071933

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum