uwsgi基础——最佳实践和问题
原文:http://projects.unbit.it/uwsgi/wiki/ThingsToKnow
需要知道的内容(最佳实践和问题)
--http 和 --http-socket 完全不一样。 第一个产生一个附加的进程(一个代理),将请求路由(routing) 到uwsgi实例上。第二个,设置uwsgi为原生的http。如果web服务器不支持uwsgi协议,你需要使用http(像webfaction 或者 heroku)--http-socket.如果你打算发布你的app(从1.3-dev版开始支持https)使用 http转发、路由、代理、负载会很可靠。
默认的发送 SIGTERM(终止信号)的意思是“brutally-reload-it”,普通的apps在遇到SIGTERM会关闭。关闭uwsgi使用SIGINT or SIGQUIT.如果你不想这样设置,你可以使用--die-on-term 选项。
如果打算托管多个应用,使用Emperor
使用uwsgitop或者相似的东西来监控你的apps
uWSGI可以从代码和插件中引入新功能。通常你发行版uwsgi包是模块化的。这种情况下要记得加载需要的插件。如果看到'unavailable modifier requested'这样的信息,意味着插件没有加载上。如果使用distro-supplied包,双击来安装。
配置文件支持,变量,if逻辑和简单循环。检查ConfigLogic 和ParsingOrder
为了转发请求到指定的插件,web服务器需要床底一个魔法数,默认数字是0(对应python)。举个栗子,转发一个请求到psgi (perl)要设置modifier为5,或者加载psgi插件为‘0’。
规则没有定义线程或进程数目。这取决于应用和系统以来。不要以为只是简单的2*cpucores就够了。你需要尝试不同的设置,同时不断的监控你的app。uwsgitop是一个非常好的工具来找到这个最佳值。
如果http请求有一个body(像post一个表单)你不读取,那么socket和web服务器的通讯会被拖垮。如果你不想手动读取,使用 --post-buffering选项,这样会自动为你读取这些数据。
常常检查你的内存使用。--memory-report 选项非常有用。
如果你打算使用unux sockets,记住它们是标准的文件对象。这意味着它们有权限,所以web服务器要可以写。
不要用root运行uwsgi。它们明显可以用root运行,但是确保它们降权使用 --uid 和--gid选项。
uwsgi 只要可能的情况下都用 fork() 来复制。默认,他会在加载应用后执行 fork 。如果你不想使用 --lazy选项。开启它,会知道uwsgi来加载应用。lazy模式优雅的重启works:代替重载的是,每个worker轮流着reload。如果你使用'lazy app loading',但你想维持标准的uwsgi重载行为,在1.3之后你可以使用 --lazy-apps 选项。
默认的python插件不会初始化GIL,意味着你的app线程不会运行。如果需要线程,记得开启 --enable-threads .运行uwsgi在多线程模式(--threads)会自动开启线程支持。这是由于性能所引起的奇怪行为,并不可耻。
如果为一个请求开启一个进程,它会继承一个worker的文件描述,包括socket连接web服务器或路由器。如果不想使用这个特性,设置--close-on-exec 选项。
Ruby的垃圾回收默认实在每个请求后。这是一个拖慢你的apps的危险策略(消耗CPU成本要低于内存成本)。改变这个频率使用 --ruby-gc <freq> option
在OpenBSD,NetBSD和FreeBSD(<9v版本)ipc信号使用的锁子系统。这次操作系统分贝的信号量优先。应该提高默认限制。如果你要运行多个uwsgi实例就提高这些限制。freebsd 9以后都不需要设置。
不要在不同的uwsgi库中编译构建插件(至少要确切的知道你要做什么)
默认的uwsgi分配一个小的buffer(4k)来接收每个请求的头信息。如果在日志中看见"invalid request block size",它意味着你需要一个大一点的buffer。使用--buffer-size增长(到60K):如果接收'21573' 作为你接收的块大小,这意味着你使用htpp实例覆盖了uwsgi协议!!!
转载于:https://www.cnblogs.com/wanself/archive/2012/11/26/2789028.html
uwsgi基础——最佳实践和问题相关推荐
- uwsgi模式_uwsgi基础——最佳实践和问题
需要知道的内容(最佳实践和问题) --http 和 --http-socket 完全不一样. 第一个产生一个附加的进程(一个代理),将请求路由(routing) 到uwsgi实例上.第二个,设置uws ...
- SAP(HANA+S/4)上云基础环境部署最佳实践
简介:为提高客户服务水平及集团管理效率,客户选择了SAP解决方案.但是同时也对客户的IT基础设施提出了更多的要求.对此我们针对SAP上云基础设施选型.云原生产品.灾备方案设计,云上安全环境设计总结出了 ...
- 点评《云计算:从基础架构到最佳实践》
读完<云计算:从基础架构到最佳实践>一书.在当前林林总总有关云计算的书籍中,该书有其独到之处,值得IT内人士以及广大云计算技术探究者们一读,特别是对有意规划和建设"私有云数据中心 ...
- 最佳实践 | 用腾讯云AI语音识别零基础实现小程序语音输入法
先回顾下,生活.工作中你使用过哪些语音识别相关的产品或者服务? 培训/考试相关的小程序,使用语音识别来判断回答是否正确: 英语口语练习的小程序,使用语音识别来打分: 你画我猜类的小程序,使用语音识别来 ...
- Java getter和Setter:基础、常见错误和最佳实践
getter和setter在Java中得到了广泛的应用.它看起来很简单,但并不是每个程序员都能正确地理解和实现这种方法.因此,在本文中,我想深入讨论Java中的getter和setter方法-从基础到 ...
- 项目版本管理的最佳实践:gitflow基础篇
对于项目版本管理,你是否存在这样的痛点:项目分支多而杂不好管理,git log界面commit信息错乱复杂无规范,版本回退不知道选择什么版本合适--. 项目版本管理的最佳实践系列,笔者将以两篇文章的形 ...
- 5种云计算安全基础知识和最佳实践
将业务迁移到云端的企业必须承担新的责任,开发新的技能,并实施新的流程.而改善云计算的安全性的第一步是假设没有安全性. 云计算改变了企业的工作方式,并将继续颠覆传统的商业模式.根据调研机构IDC公司的预 ...
- 基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?
简单介绍: 说明: 在指定命名空间中计算参数字符串的有效表达式,并返回一个对象, Help on built-in function eval in module __builtin__:eval(. ...
- Java基础学习总结(165)——API 安全最佳实践
虽然本质上 API 就是拿来用的,但即便某个 API 的使用者全是内部人员,它还是可能会出现安全问题.为了解决 API 安全问题,在本文我们收集了一系列 API 的最佳实践,希望你记住这些 Tips ...
最新文章
- 干货!用大白话告诉你什么是Mock测试
- JZOJ 5183. 【NOIP2017提高组模拟6.29】小T的钢琴
- 用于Web开发的8 个最好的跨平台编辑器
- win8下cocos2dx3.2移植android平台及代码打包APK
- 君正T20平台生成jffs2格式rootfs
- java学习(105):字符串indexof,spilt,substring方法
- python变量和字符_Python变量和字符串
- SSO单点登录学习总结(3)—— 基于CAS实现单点登录实例
- 在线编辑器FreeTextBox的使用
- 回答朋友的问题(关于 RTEMS 学习)
- 前端页面加载速度优化---Ngnix之GZIP压缩
- Oracle bad magic 1,linux下Oracle的安装
- 学术论文的格式要求是怎样的?
- 计算机电源接口作用,计算机DIY必修课程,电源接口的详细说明
- 数据库优化---空间换时间优化
- win7系统中如何使文件显示出扩展名
- 房产经纪人拿楼市新政炒作涨价
- vue3中 v-md-editor 编辑器的基本使用分享
- 到了公司git使用工作流
- RPA技术可行性方案确认-辅助手册