uwsgi配置文件详解

官方文档

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.1
  master: 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: 128
  reload-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 Flask

app = 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文件应该包含以下部分:

  1. [uwsgi] 部分:这是uwsgi配置文件的主要部分,其中包含了uwsgi服务器的一些基本配置。

    socket:这是uwsgi服务器将要监听的地址和端口,它应该与你的nginx代理中的upstream相匹配。
    chdir:这是你的Django项目的根目录,uwsgi会在这个目录下启动应用程序。
    module:这是你的Django应用程序的主模块,它应该是<项目名>.wsgi:application。
    master:这个选项将启用uwsgi主进程。
    processes:这个选项是启动的uwsgi工作进程数。
    threads:每个工作进程的线程数。

  2. env 部分:这个部分包含了您的Django应用程序需要的环境变量,例如数据库连接信息、密钥等等。

  3. logto 部分:这个部分指定了uwsgi日志文件的位置,以及日志级别。

[uwsgi]
socket = /tmp/uwsgi.sock
chdir = /path/to/project
module = project.wsgi:application
master = true
processes = 2
threads = 4

env = DJANGO_SETTINGS_MODULE=project.settings.production
env = SECRET_KEY=your_secret_key_here

logto = /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日志格式。

Django:Linux系统uwsig启动项目报错–Listen queue size is greater than the system max net.core.somaxconn (128)

1、错误原因

    uwsgi的配置文件中的listen的值设置太大了,超过系统默认值128

2、修改系统配置文件

    /proc/sys/net/ipv4/tcp_max_syn_backlog

    /proc/sys/net/core/somaxconn

使用root权限,分别输入

    echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog

    echo 262144 > /proc/sys/net/core/somaxconn  
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
uWSGI是一个Web服务器,它支持多种Web服务器协议和Python应用程序的部署。uWSGI还支持多线程和异步请求处理,可以提高Web应用程序的性能。下面是uwsgi模式_uwsgi配置详解: 1. 安装uWSGILinux系统中,可以使用以下命令安装uWSGI: ```bash pip install uwsgi ``` 2. 编写uWSGI配置文件 uWSGI配置文件是一个INI文件,可以指定uWSGI服务器的各种参数。以下是一个简单的uWSGI配置文件示例: ```ini [uwsgi] socket = 127.0.0.1:8000 chdir = /path/to/project module = myapp.wsgi:application processes = 4 threads = 2 ``` 以上配置文件中,指定了uWSGI服务器监听的IP地址和端口号、应用程序的根目录、应用程序的入口模块和函数、启动的进程数和线程数。 3. 启动uWSGI服务器 可以使用以下命令启动uWSGI服务器: ```bash uwsgi --ini uwsgi.ini ``` 以上命令会读取当前目录下的uwsgi.ini文件,并使用其中的配置启动uWSGI服务器。 4. 配置Nginx服务器 uWSGI服务器通常和Nginx服务器一起使用,可以通过Nginx代理请求到uWSGI服务器。以下是一个简单的Nginx配置文件示例: ```nginx server { listen 80; server_name example.com; location / { uwsgi_pass 127.0.0.1:8000; include uwsgi_params; } } ``` 以上配置文件中,指定了Nginx服务器监听的IP地址和端口号、请求的域名、代理请求到的uWSGI服务器地址和端口号、以及uWSGI服务器的参数。 总结: 以上是uwsgi模式_uwsgi配置详解。通过uWSGI服务器和Nginx服务器的配合,可以快速部署Python Web应用程序,并提高Web应用程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Generalzy

倍感荣幸文章对您有帮助

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值