uwsgi FAQ 和 最佳实践

FAQ

为什么要使用

完整的网站应用的开发解决方案
进程管理、长时间运行的任务、RPC、集群、负载均衡、监控、资源限制

并发性能

需要注意OS socket backlog queue limit( /proc/sys/net/somaxconn /proc/sys/net/ipv4/tcp_max_syn_backlog)

Harakiri

调整超时时间和监听队列

调整

增加工作进程并不意味着增加性能,应该按照应用来设置
(IO带宽 CPU IO延时)
关于线程,不用线程就别启用
可以禁用多解释器,如果只运行一个应用则可禁用多个解释器 single-interpreter = true
在生产环境中要启用master

uwsgi 协议

集群

uwsgi rpc stack可快速调用远程节点上的函数
uwsgi legion subsystem可选举出多节点中的主节点

最佳实践

如果把uwsgi直接暴露在外,可使用http,如果想在一个服务器之后使用uwsgi,可使用http-socket(http会启动一个额外的进程来将请求分发给工作进程,通过router proxy load-balancer作为护盾,这个护盾还可以独立启动,通过http-to来和sock交流)

Native HTTP support — uWSGI 2.0 documentation (uwsgi-docs.readthedocs.io)

如果是部署多个app 使用emperor

使用uwsgitop 通过uwsgi stats server来监控app

http请求的body应该被读取,如果未读取则影响服务器
可以设置post-buffering选项来让uwsgi来自动读取数据

关于app使用的内存,可以设置memory-report选项

关于权限:如果使用的是unix socket那么需要注意文件的权限;启动uwsgi时默认按root,但可通过uid gid来控制

默认没有GIL,在应用中创建的线程就不会运行 可通过enable-threads来启用
如果设置了threads选项(使用线程模型)会自动启用

在请求中启动一个新的进程会继承父进程的文件标识符,包括连接的socket,设置close-on-exec来禁用该行为

默认的请求头部大小为4096byte,如果收到invalid request block size则需要设置buffer-size为更大的缓冲,最大65535

查看ip_conntrack_max,如果有很多闲置工作进程

strict 严格配置文件

在真实部署时关掉python的code auto reloading

wsgi.file_wrapper如果在返回内存中文件中会出错,可通过wsgi-disable-file-wrapper = true来禁用


vacuum = true 指示uwsgi清除它产生的任意临时文件

need-app = true 没有app则不启动

disable-logging = true禁用了日志记录后可以启用log-4xx = true log-5xx = true来启用异常情况下的日志记录

工作进程回收

max-requests = 1000
max-worker-lifetime = 3600
reload-on-rss = 2048
worker-reload-mercy = 60


额外特性

http相关支持

./uwsgi --http 127.0.0.1:8080 --master --module mywsgiapp --processes 4
./uwsgi --master --http 127.0.0.1:8080 --http-to /tmp/uwsgi.sock

(1)使用了1个主进程负责分发请求,4个工作进程来处理
(2)使用了uwsgi socket来分发

[uwsgi]
http = 0.0.0.0:8080
http = 192.168.173.17:8181
master = true
http-to = /tmp/uwsgi.sock
http-to = 192.168.173.1:3031
http-to = 192.168.173.2:3031

可监听多个地址 可分发到多个地址
可查看subscription服务,有更多的配置选择
可通过http-var来向工作进程传递uwsgi变量
可通过http-modifier1向工作进程传递

关于keep alive,应用应当返回正确的HTTP头部,设置有效的content-length或使用http-auto-chunked选项;设置Connection: Keep-Alive或使用add-header = Connection: Keep-Alive选项;http11-socket选项

关于gzip,使用http-auto-gzip选项,如果uWSGI-Encoding头部设置为了gzip,同时Content-Length和Content-Encoding没有设置

https相关支持

uwsgi --master --https 0.0.0.0:8443,foobar.crt,foobar.key
使用一般端口开始https服务

uwsgi --shared-socket 0.0.0.0:443 --uid roberto --gid roberto --https =0,foobar.crt,foobar.key
因443端口需要权限,这里用shared socket并在绑定后切换用户

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容

  • 通过Python/WSGI应用快速入门[https://www.jianshu.com/p/9a367222cb8...
    robot_test_boy阅读 92评论 0 3
  • uWSGI参考资料(1.0版本的配置选项列表) 下面的内容包含了大部分uWSGI的配置选项,这些配置选项的列举没有...
    nine_9阅读 21,771评论 1 10
  • 搭建简单的nginx+uwsgi服务 附录(uwsgi ini文件内容详解) 客户端发送一个http请求,被ngi...
    雄柱阅读 906评论 0 1
  • socket uwsgi监听的socket,可以为socket文件或ip地址+端口号socket = /www/w...
    凤非飞阅读 10,584评论 0 3
  • 更多关注:http://www.mknight.cn/post/602/ python3 编译安装 依赖环境安装 ...
    Medivh_阅读 694评论 0 0