[uwsgi]#使用优雅重启
lazy-apps = true
#监听monitor文件 当monitor文件发生改变是重启uwsgi
touch-chain-reload = /home/monitor
#据说可以用touch-reload=路径 来监听某个路径下是否有文件发生了改动
#个人认为还是监听某个不相干的文件比较好 每次需要重启的时候直接touch这个文件就行了

在uwsgi配置文件中加入上面的命令即可优雅的重启uwsgi了

在使用uwsgi+django过程中,接口少的时候看不出什么。当接口多并且请求也很多的时候 uwsgi --reload 这种操作就体现出他的短板了。有一次我在app下新增了个接口执行uwsgi --reload的时候突然发现之前的接口在请求中要么无响应要么等待时间特别的长

于是在网上一堆扒拉终于发现原来uwsgi可以“优雅的重启” 好吧!是我孤陋寡闻了

---------------------------------------------

以下内容来自网络

原文链接:https://blog.csdn.net/asas043/article/details/102443649

传统重启弊端:
后台上线功能,以往的做法是当有对代码进行更改,需要将新代码提供给用户时,将uwsgi服务器重新启动以使更改生效,但这个重启过程会将所有uwsgi的worker进程强行kill掉,然后再重新启动这些worker,导致的结果:

worker正在处理的请求无法正常处理完,
重启过程中uwsgi无法正常接收请求,请求报502的错误,特别是由于某些原因重启时间可能很久
从stop uwsgi到start uwsgi需要一定时间,这期间就损害了用户的体验:

在网站上看到服务不可用的错误
在请求处理中用户等待很久
服务重启遇到程序bug,导致重启失败

优雅重启过程:
优雅的重启是一门艺术,优雅重启的方式有多种,但经过测试,链式重启是最优选择之一,且实现起来非常方便

链式重启的实现过程是一个接一个工人依次重新加载启动,直到所有工人都重新加载完毕。比如你有五个工人,工人A,工人B,工人C...,当你触发链式重启时:

若工人A此刻正在处理请求,链式重启允许它完成此次请求,工人A开始重新加载最新代码
如果工人A顺利完成加载,此时工人A接收到的请求都由最新代码处理,而其他4个工人则依然运行旧代码
工人A顺利完成加载后,依次由工人B开始重新加载最新代码,重复此操作,直到每个工人都获取新代码。链式重启过程完成
如果前一个工人没有加载成功,那么后一个工人也不会进行重启加载,这就意味着,如果程序有bug,其他工人都不会受到任何影响,依然能正常接收请求,这点非常棒,与传统野蛮重启方式相比有明显优势

优雅的重启uwsgi 告别uwsgi reload过程中造成的无法请求、请求延迟等问题的更多相关文章

  1. redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用

    redis 突然大量逐出导致读写请求block   内容目录: 现象 背景 原因 解决方案 ref 现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请 ...

  2. [原创] Nginx1.13版本reload过程对TCP包影响的测试

    Nginx1.13版本reload过程中各项连接情况和状态的测试.测试Nginx1.13 Reload过程中,对客户端和服务器的TCP层面的包影响.     1)对客户端开启长连接,服务端开启/不开启 ...

  3. 浅析uWSGI、uwsgi、wsgi

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  4. python Web中WSGI uWSGI 以及 uwsgi的区别

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  5. 生产环境优雅的重启基于Nginx、Tornado的Web服务进程

    Nginx是一个高效的Web服务器及代理服务器,Tornado是一个基于epoll的异步Web开发框架,通常使用Nginx做为Web服务器时,都会以FastCGI模式,而我们从开发.调试.运维的角度考 ...

  6. Nginx、WSGI、 uWSGI、 uwsgi的区别

    当我们部署完一个应用程序,浏览网页时具体的过程是怎样的呢?首先我们得有一个 Web 服务器来处理 HTTP 协议的内容,Web 服务器获得客户端的请求,交给应用程序,应用程序处理完,返回给 Web 服 ...

  7. uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。

    WSGI 协议 WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等.但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为 ...

  8. WSGI、uwsgi和uWSGI

    一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...

  9. 区分wsgi、uWSGI、uwsgi、php-fpm、CGI、FastCGI

    在学习Python web开发时候,可能会遇到诸如uwsgi,wsgi等名词,下面通过梳理总结探究它们之间的关系. CGI CGI,(Common Gateway Interface)通用网关接口,是 ...

  10. 如何在Eclipse和Tomcat的Debug过程中启用热部署

    参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...

随机推荐

  1. 使用man手册查看内核函数

    1.为避免man的一些功能缺失,先装好manpages-dev sudo apt-get install manpages-dev 2.安装mandocs的依赖包xmlto sudo apt-get ...

  2. KingbaseES 数据库连接断开问题排查思路

    用户在使用数据库过程中,经常会发现如果会话空闲一段时间,会话有可能断开,需要重连.这个问题影响因素很多,包括数据库参数设置.操作系统参数.防火墙等.以下介绍KingbaseES针对该问题的排查思路. ...

  3. IO_对象流

    对象流 对象的本质是用来组织和存储数据的,对象本身也是数据.那么,能不能将对象存储到硬盘上的文件中呢?能不能将对象通过网络传输到另一个电脑呢?我们可以通过序列化和反序列化实现. java对象的序列化和 ...

  4. HBuilder X之uniapp最适合的代码补全模板

    { // 注意:本文档仅支持单行注释,并且'//'前不能有任何非空字符!!! // // HBuilderX使用json扩展代码块,兼容vscode的代码块格式 // 本文档修改完毕,保存即可生效,无 ...

  5. windows下 Rust 环境配置

    搭建 Visual Studio Code 开发环境 首先,需要安装最新版的 Rust 编译工具和 Visual Studio Code. Rust 编译工具:https://www.rust-lan ...

  6. 四、frp内网穿透服务端frps.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]服务器IPbind_addr = 0.0.0.00.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中 ...

  7. 【ProxySQL】ProxySQL Cluster的搭建

    文章转载自:https://blog.51cto.com/l0vesql/2104643 背景 早期的ProxySQL若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并 ...

  8. 6.使用nexus3配置yum私有仓库

    yum相较于rpm,能够更好地解决安装软件时的依赖包问题,使用yum安装更简单更方便.搭建本地YUM源服务器,可以避免升级安装软件时占用公网带宽:有了本地YUM源服务器,可以解决无法连接Interne ...

  9. 2_CSS

    1. 什么是CSS 1.1 什么是CSS Cascading Style Sheet 层叠样式表 是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的 ...

  10. HDU3949/AcWing210 XOR (高斯消元求线性基)

    求第k小的异或和,用高斯消元求更简单一些. 1 //用高斯消元求线性基 2 #include<bits/stdc++.h> 3 using namespace std; 4 #define ...