uwsgi配置文件详解
目录
- 官方文档
- 安装
- 配置风格
- 命令行参数(command line args)
- 环境变量(environment variable)
- xml文件
- ini文件
- yaml文件
- 配置参数
- socket
- protocol
- processes
- harakiri
- harakiri-verbose
- xml
- daemonize
- listen
- max-var
- buffer-size
- chmod
- master
- socket-timeout
- ini
- yaml or yml
- json
- limit-as
- reload-on-as
- reload-on-rss
- env
- vacuum
- threads
- wsgi-file
- chdir
- evil-reload-on-as
- evil-reload-on-rss
- disable-logging
- http
- 常用配置项
- 应用于django
- 应用于flask
- Q&A
- 如何高效的配置一个uwsgi.ini
官方文档
uwsgi:https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html
安装
pip install uwsgi
uwsgi仅支持linux环境下安装。
配置风格
uwsgi支持多种配置格式:命令行,yaml,ini,xml…,
具体如何部署python项目可以参考我的另一篇博客:https://blog.csdn.net/General_zy/article/details/121783016django,flask项目docker部署(uwsgi)——关于项目上线的杂七杂八
命令行参数(command line args)
格式:–socket <path/address>
例:uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
环境变量(environment variable)
格式:选项名都要换成大写,并且加上“UWSGI_”
前缀,所有选项名中的“-”都要换成下划线“_”
例:UWSGI_MAX_VARS="<n>"
,"UWSGI_SOCKET=127.0.0.1:8000"
xml文件
格式:
<uwsgi><socket>127.0.0.1:3031</socket><master/>
</uwsgi>
ini文件
[uwsgi]
socket = 127.0.0.1:3031
master = true
yaml文件
uwsgi:socket: 127.0.0.1master: 1
配置参数
socket
指定uwsgi的客户端将要连接的socket的路径(使用UNIX socket的情况)或者地址(使用网络地址的情况)。(用作uwsgi中间件时使用)
# 命令行
--socket /tmp/uwsgi.sock
以上配置将会绑定到 /tmp/uwsgi.sock 指定的UNIX socket# 命令行缩写
-s 127.0.0.1:1717
以上配置会绑定到ipv4地址127.0.0.1的1717端口# ini
[uwsgi]
socket = 127.0.0.1:1717
protocol
设置默认的通信协议(uwsgi,http,fastcgi)
--protocol <protocol>
processes
设置工作进程的数量
# 命令行
--processes 8
以上配置会产生8个工作进程# 命令行
--workers 4
以上配置会产生4个工作进程# 命令行缩写
-p 8
以上会产生8个工作进程# xml
<uwsgi><workers>3</workers>
</uwsgi>
这个配置会产生3个工作进程
harakiri
设置harakiri超时时间,一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)。
--harakiri 60
harakiri-verbose
当一个请求被harakiri杀掉以后,将在uWSGI日志中得到一条消息。
--harakiri-verbose
以上配置会开启harakiri的额外信息。
xml
加载指定的xml配置文件。当使用命令行参数时,可以使用简化命令“-x”。在xml配置文件中,可以有多个“”节,不同的节之间用id属性区分。通过在文件名后面增加id(使用冒号分隔)来选择应用哪个“”节。
--xml /etc/myapp.xml
以上配置会加载/etc/myapp.xml这个配置文件。--xml /etc/myapp.xml:django
以上命令会使用/etc/myapp.xml这个配置文件中的“django”这个节作为配置选项
xml配置文件:
<all_the_apps><uwsgi id="turbogears"><socket>/tmp/tg.sock</socket></uwsgi><uwsgi id="django"><socket>/tmp/django.sock></uwsgi>
</all_the_apps>
这种情况下,根节点可以是任何想要的名字(这就允许将uwsgi这个配置节加到其他xml文件中)
如果在命令行的最后一个参数以“.xml”结尾,那么就隐含将加载该xml文件作为配置。
/usr/bin/uwsgi /etc/myapp.xml
以上命令会使uWSGI自动加载 /etc/myapp.xml配置文件。
daemonize
使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
--daemonize /var/log/uwsgi.log
这个指令会让uWSGI在后台运行并将日志打到 /var/log/uwsgi.log文件中。[uwsgi]
daemonize = 192.168.0.100:4000
这个配置将会使uWSGI在后台运行,并且将日志消息发送给监听192.168.0.100:4000这个地址的udp服务器。
listen
设置socket的监听队列大小(默认:100)。
每一个socket都有一个相关联的队列,请求会被放入其中等待进程来处理。当这个队列慢的时候,新来的请求就会被拒绝。
队列大小的最大值依赖于系统内核。
max-var
设置uwsgi客户端能够传递给uwsgi的变量的最大数量值。这只是一个安全相关的值,大多数情况下不需要设置它。
buffer-size
设置用于uwsgi包解析的内部缓存区大小。默认是4k,可以增加这个值到64k。
--buffer-size 32768
这个命令会允许uWSGI服务器接收最大为32k的uwsgi包,再大的包就会被拒绝。
chmod
unix socket是个文件,所以会受到unix系统的权限限制。如果uwsgi客户端没有权限访问uWSGI socket,可以用这个选项设置unix socket的权限。
当在xml配置文件中只是用这个选项作为一个标识符,那么会将权限设为666,否则就是设置为指定的权限值。
<uwsgi><chmod-socket/>
</uwsgi>
这个配置会将socket文件的权限设为666<uwsgi><chmod-socket>644</chmod-socket>
</uwsgi>
这个配置会将socket文件的权限设为644
master
启动主进程。
socket-timeout
为所有的socket操作设置内部超时时间(默认4秒)。
--socket-timeout 10
这个配置会结束那些处于不活动状态超过10秒的连接。
ini
设置ini配置文件的路径。
--ini <inifile>
yaml or yml
设置yaml配置文件的路径。
--yaml <yamlfile>
json
设置json格式的配置文件的路径。
格式遵循的规则跟其他支持的配置格式一样(支持正整数,布尔数和数组):
{"uwsgi": {"http": ":8080","master": true,"module": "werkzeug.testapp:test_app","workers": 8,"pythonpath": [ "/foo", "/bar" ]}}
为了使用JSON,需要jansson库。默认情况下,会自动检测到库的所在位置,但是也可以buildconf或者默认ini配置文件来指定。
--json <jsonfile>
limit-as
通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。
--limit-as 256
这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
reload-on-as
当一个工作进程的虚拟内存占用超过了限制的大小,那么该进程就会被回收重用(重启)。
--reload-on-as 128
这个配置会重启所有占用虚拟内存超过128M的工作进程。当工作进程因此重启时,本次请求的响应不会受影响,返回正常结果。
reload-on-rss
跟reload-on-as的效果类似,不过这个选项控制的是物理内存。可以同时使用这2个选项:
uwsgi:reload-on-as: 128reload-on-rss: 96
这个配置会导致所有占用128M以上虚拟内存或者超过96M物理内存的工作进程重启。
当工作进程因此重启时,本次请求的响应不会受影响,返回正常结果。
env
设置一个系统环境变量。
[uwsgi]
env = DJANGO_SETTINGS_MODULE=mysite.settings
这个配置将会设置一个环境变量DJANGO_SETTINGS_MODULE,它的值为mysite.settings
vacuum
当服务器退出的时候自动删除unix socket文件和pid文件。
threads
开启线程操作模式,必须指定每个工作进程的线程数。
--threads 40 --workers 2
这个配置会导致生成2个工作进程,每个工作进程有40个子线程。
wsgi-file
加载指定的WSGI文件
chdir
工作目录
evil-reload-on-as
主进程会重启占用虚拟内存超过M的工作进程。
--evil-reload-on-as <n>
evil-reload-on-rss
主要效果跟evil-reload-on-as一样,但是这个选项控制的是非共享物理内存。
--evil-reload-on-rss <n>
disable-logging
不记录请求信息的日志。只记录错误以及uWSGI内部消息到日志中。
http
开启嵌入的http服务器、路由、网关、负载均衡、代理。(用来直接做web服务器时使用)
常用配置项
[uwsgi]
socket = 127.0.0.1:9000
chdir = /xspeeder/xweb/
wsgi-file = xweb/wsgi.py
master = true
processes = 1
buffer-size = 65535
evil-reload-on-rss = 256
evil-reload-on-as = 256
threads = 1
daemonize = /home/log/wsgi.log
vacuum = true
disable-logging = true
应用于django
[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
启动:
uwsgi yourfile.ini
应用于flask
from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return "<span style='color:red'>I am app 1</span>"
启动:
uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191
Q&A
如何高效的配置一个uwsgi.ini
一个高效的uwsgi.ini文件应该包含以下部分:
[uwsgi] 部分:这是uwsgi配置文件的主要部分,其中包含了uwsgi服务器的一些基本配置。
socket:这是uwsgi服务器将要监听的地址和端口,它应该与你的nginx代理中的upstream相匹配。
chdir:这是你的Django项目的根目录,uwsgi会在这个目录下启动应用程序。
module:这是你的Django应用程序的主模块,它应该是<项目名>.wsgi:application。
master:这个选项将启用uwsgi主进程。
processes:这个选项是启动的uwsgi工作进程数。
threads:每个工作进程的线程数。env 部分:这个部分包含了您的Django应用程序需要的环境变量,例如数据库连接信息、密钥等等。
logto 部分:这个部分指定了uwsgi日志文件的位置,以及日志级别。
[uwsgi]
socket = /tmp/uwsgi.sock
chdir = /path/to/project
module = project.wsgi:application
master = true
processes = 2
threads = 4env = DJANGO_SETTINGS_MODULE=project.settings.production
env = SECRET_KEY=your_secret_key_herelogto = /var/log/uwsgi.log
logformat = %(addr) - %(user) %(time) "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"
uwsgi服务器将监听/tmp/uwsgi.sock,并启用2个工作进程,每个工作进程4个线程。项目根目录为/path/to/project,主模块为project.wsgi:application。环境变量DJANGO_SETTINGS_MODULE和SECRET_KEY也被设置。最后,日志文件被记录在/var/log/uwsgi.log中,日志格式被指定为Apache日志格式。
uwsgi配置文件详解相关推荐
- nginx服务器安装及配置文件详解
nginx服务器安装及配置文件详解 seanlook 5月26日 发布 4 推荐 97 收藏,9.2k 浏览 nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自 ...
- mybatis mysql 配置文件_Mybatis配置文件详解(4)
本次主要来了解: MyBatis数据库配置文件SqlMapConfig.xml SQL映射配置中输入映射的配置 SQL映射配置中输出映射的配置 SQL映射配置中动态SQL语句的配置 1. SqlMap ...
- MyBatis复习笔记2:配置文件详解
配置文件详解 属性(properties) MyBatis可以使用 properties 来引入外部 properties 配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或 ...
- vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解
前言:当使用vue-cli进行开发时时常需要动态配置一些设置,比如接口的请求地址(axios.defaults.baseURL),这些设置可能需要在项目编译后再进行设置的,所以在vue-cli里我们需 ...
- (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- CENTOS7 高性能Linux集群 通过yum进行 haproxy配置 !安装 !使用!HAProxy配置文件详解
Haproxy配置 永久修改名字:便于区分虚拟机! Haproxy:hostnamectl set-hostname haproxy Web1: hostnamectl set-hostname WE ...
- 用户管理 之 用户(User)和用户组(Group)配置文件详解
作者:北南南北 来自:LinuxSir.Org 摘要:本文详解用户(User)和用户组(Group)的配置文件,本文是<Linux 用户(User)和用户组(Group)管理概述>文档的关 ...
- 【ZooKeeper】配置文件详解
ZooKeeper的配置文件详解 zkServer.sh读取的默认配置文件是$ZOOKEEPER_HOME/conf/zoo.cfg.如果要用其它配置文件.如下传递配置文件参数: zkServer.s ...
- vsftpd配置文件详解
1.默认配置: 1>允许匿名用户和本地用户登陆. anonymous_enable=YES local_enable=YES 2>匿名用户使用的登陆名为ftp或an ...
最新文章
- BiLSTM-CRF学习笔记(原理和理解) 维特比
- 参悟JavaScript
- 面试题—Mysql篇
- pytorch教程龙曲良31-35
- 分布式事物(2PC,3PC,CAP,柔性与刚性事物,LCN)
- PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
- 谁考了第k名(信息学奥赛一本通-T1176)
- 从Java直接输出到flume_js生成日志信息及实现java直接调用flume
- java静态接口方法使用_使用静态方法对接口进行Java编程
- nvm for window 开源资源(免费下载)
- java影院座位订票代码_基于jsp的影院订票-JavaEE实现影院订票 - java项目源码
- textarea输入框光标定位问题
- C#求学之路MVC《医院管理系统》项目研发文献
- 【ZBH选讲·树变环】
- 21届秋招记录——银行篇
- 《沉默的大多数》王小波——读后感
- Latex安装失败问题
- 树莓派+USB摄像头进行网络监控—MJPG-Streamer
- 【论文笔记】投影仪-相机系统标定方法
- 【RedisTemplate】
热门文章
- python中偏度和峰度的计算公式
- 作为前辈,你有什么忠告想跟网工专业的同学们说?
- flyme4.2 android,流畅度有所提高 魅族Flyme4.2.6上手体验
- Android开机自启动C程序调试
- stm32串口接收不到数据的一些问题
- js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)
- 学习python出现的问题_读取表格分界符不对
- 移动硬盘文件丢失怎么恢复?
- [HW必备]|蓝队防守必须排查的57个安全漏洞与解决方案
- 卷积神经网络简单认知