四、uwsgi


返回

4.1 安装

  • 安装
    $ pip3 install -i https://pypi.douban.com/simple/ uwsgi
    

4.2 配置文件

  • 配置文件

    $ mkdir /opt/venv_crm/uwsgi/  # 创建配置文件目录
    $ vim /opt/venv_crm/uwsgi/uwsgi.ini  # 创建配置文件
    
    ####################################### 主要配置 ############################################
    [uwsgi]
    
    # the base directory (full path) django 程序的主目录绝对路径
    chdir = /root/crmProject/
    
    # Django's wsgi file
    #wsgi-file =src/wsgi.py
    # 找到第二层目录下的wsgi.py
    module = crmProject.wsgi
    
    # python环境
    # 如果是虚拟环境,填写虚拟环境的第一层绝对路径
    home = /root/venv01
    
    #the local unix socket file than commnuincate to Nginx 用于和 nginx 进行数据交互的端口
    # 用于和nginx结合部署的unix-socket参数
    # 使用此协议运行后台,浏览器就无法通过http协议直接访问uwsgi+django项目,而是通过nginx反向代理,更安全
    socket = 0.0.0.0:8000
    # 对外提供 http 服务的端口,线上不会用http参数,因为对后端是不安全的,临时使用方便浏览器调试
    # http = :8000
    
    master = true  # 主进程
    # maximum number of worker processes,优化建议:2*cpu核数+1
    processes = 5
    
    # clear environment on exit
    vacuum = true
    
    ########################################## end ############################################
    
    #thread numbers startched in each worker process
    #threads = 10
    
    #一个高阶的cheap模式,在启动的时候只会分配n个工作进程,并使用自适应算法启动新的进程
    #cheaper = 10
    
    #在经过sec秒的不活跃状态的进程会被销毁(进入了cheap模式),并最少保留cheaper指定的进程数
    #idle = 3600
    
    #monitor uwsgi status 通过该端口可以监控 uwsgi 的负载情况
    stats = 127.0.0.1:9000
    
    #设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
    harakiri = 60
    #当一个请求被harakiri杀掉会,会输出一条日志
    harakiri-verbose = true
    
    #开启内存使用情况报告
    memory-report = true
    
    #设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒)
    reload-mercy = 10
    
    #设置工作进程使用虚拟内存超过N MB就回收重启
    reload-on-as= 1024
    
    #自动给进程命名
    auto-procname = true
    
    #为进程指定前缀
    procname-prefix-spaced = xc-mms
    
    #设置工作进程每处理N个进程就会被回收重启
    max-requests=500000
    
    #设置工作进程使用物理内存超过N MB就回收重启
    reload-on-rss=100
    
    #设置socket超时时间,默认4秒
    socket-timeout=10
    
    #限制http请求体的大小(Bytes)
    limit-post=4096
    
    #不记录request日志,只记录错误日志
    disable-logging = true
    
    #将日志打印到syslog上
    #log-syslog = true
    
    # 后台运行,并输出日志
    daemonize = /home/opadm/log/uwsgi.log
    
    stats=./uwsgi.status
    
    
    ########################################## 其它配置 ##########################################
    """
    uid = root
    gid = root
    vhost = true  //多站模式
    no-site = true  //多站模式是不设置入口模块和文件
    workers = 2  //子进程数
    reload-mercy = 10  //平滑的重启
    vacuum = true  //退出重启时清理文件
    max=requests = 1000  //开启10000个进程后,自动respawn下
    limit-as = 512  //将进程总内存量控制在512M
    buffer-size = 30000
    pidfile = /var/run/uwsgi9090.pid  //pid文件,用于下面脚本启动、停止该进程
    daemonize = /website/uwsgi9090.log
    """
    
    

4.3 启动

  • 启动

    $ uwsgi --ini /etc/uwsgi/uwsgi.ini
    
  • 关闭

    $ uwsgi --stop uwsgi.pi
    
  • 杀死进程

    $ pkill -9 uwsgi
    

4.4 supervisor 快速启动

  • 安装

    $ yum -y install supervisor
    
  • 配置文件

    $ echo_supervisord_conf > /etc/supervisord.conf  # 导出配置文件
    $ vim /etc/supervisord.conf  # 编辑配置文件
    
    # 追加如下内容
    [program:uwsgi_crm]
    command = /opt/python379/bin/uwsgi  --ini  /etc/uwsgi/uwsgi.ini  ; 绝对路径执行命令
    autostart = true  ; 在supervisord启动的时候也自动启动
    startsecs = 10  ; 启动10秒后没有异常退出,表示启动成功,默认为1秒
    autorestart = true  ; 程序退出后自动重启,可选值[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
    stopasgroup = true  ; 默认为false,进程被杀死时,是否向进程组发送stop信号,包括子进程
    killasgroup = true  ; 默认为false,是向进程组发送kill信号,包括子进程
    
  • 启动supervisord

    $ supervisord -c /etc/supervisord.conf
    
  • 进程管理

    $ supervisorctl -c /etc/supervisord.conf
    >> status  # 查看进程状态
    >> stop uwsgi_crm  # 停止uwsgi_crm进程
    >> stop all  # 停止所有进程
    >> start uwsgi_crm  # 开启uwsgi_crm进程
    >> restart uwsgi_crm  # 重启uwsgi_crm进程
    >> exit  # 退出
    
  • 关闭

    $ supervisorctl shutdown
    
返回