mod_wsgi的工作模式和配置
Openstack所有提供API接口的服务都是python web server,而其本身性能很弱,目前已经将它们配置到了apache上。但对于如何设置mod_wsgi的参数,我一直没有好好去阅读其文档。
参考了mod_wsgi 的两种模式和Process and Thread两篇文章后,我来归纳一下:
目前mod_wsgi有两种工作模式:
第一种是嵌入模式,类似于mod_python,直接在apache进程中运行,这样的好处是不需要另外增加进程,但是坏处也很明显,所有内存都和apache共享,如果和mod_python一样造成内存漏洞的话,就会危害整个apache。而且如果apache是用worker mpm,mod_wsgi也就强制进入了线程模式,这样子对于非线程安全的程序来说就没法用了。
这种模式下需要在apache的vhost中如下设置:
WSGIScriptAlias /path /path-to-wsgi
即可生效,对于小型脚本的话,直接用这种模式即可。
第二种是后台模式,类似于FastCGI的后台,mod_wsgi会借apache的外壳,另外启动一个或多个进程,然后通过socket通信和apache的进程联系。
这种方式只要使用以下配置即可:
#启动WSGI后台,site1是后台名字 WSGIDaemonProcess site1 processes=1 threads=15 display-name=%{GROUP}#分配当前上下文应该使用哪个WSGI后台,可以放在Location里面指定 WSGIProcessGroup site1#根据当前上下文的ProcessGroup分配到对应的后台 WSGIScriptAlias /path /path-to-wsgi
在这种模式下,我们可以通过调节processes和threads的值来设置三种MPM的模式:prefork', 'worker', 'winnt'。
winnt模式
WSGIDaemonProcess example threads=25
wsgi.multithread True wsgi.multiprocess False
此时processes=1,但是multiprocess为false
如果显式地指出processes为1那么:
WSGIDaemonProcess example processes=1 threads=25
wsgi.multithread True wsgi.multiprocess True
worker模式
WSGIDaemonProcess example processes=2 threads=25
wsgi.multithread True wsgi.multiprocess True
preforker模式
WSGIDaemonProcess example processes=5 threads=1
wsgi.multithread False wsgi.multiprocess True
后台模式由于是与apache进程分离了,内存独立,而且可以独立重启,不会影响apache的进程,如果你有多个项目(django),可以选择建立多个后台或者共同使用一个后台。
比如在同一个VirtualHost里面,不同的path对应不同的django项目,可以同时使用一个Daemon:
WSGIDaemonProcess default processes=1 threads=1 display-name=%{GROUP}WSGIProcessGroup defaultWSGIScriptAlias /project1 “/home/website/project1.wsgi”WSGIScriptAlias /project2 “/home/website/project2.wsgi”
这样子两个django都使用同一个WSGI后台。
也可以把不同的项目分开,分开使用不同的后台,这样开销比较大,但就不会耦合在一起了。
display-name是后台进程的名字,这样方便重启对应的进程,而不需要全部杀掉。
WSGIDaemonProcess site1 processes=1 threads=1 display-name=%{GROUP}WSGIDaemonProcess site2 processes=1 threads=1 display-name=%{GROUP}<Location “/project1″>
WSGIProcessGroup site1
</Location>
WSGIScriptAlias /project1 “/home/website/project1.wsgi”<Location “/project1″>
WSGIProcessGroup site2
</Location>
WSGIScriptAlias /project2 “/home/website/project2.wsgi”
对于django 1.0以下的版本,由于官方认定不是线程安全的,所以建议使用多进程单线程模式
processes=n threads=1
对于django 1.0以后,就可以放心的使用多进程多线程模式:
processes=2 threads=64
这样子性能会更好。
mod_wsgi的工作模式和配置相关推荐
- Apache之三种工作模式和配置性能优化
1 Apache的3种模式和版本 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式,它们分别是prefork,worker和event. 我 ...
- 把虚拟系统接入网络 虚拟系统工作模式
如果你想利用VMWare在局域网中新建一个独立的虚拟服务器,为局域网用户提供网络服务;或者想创建一个与网内其他机器相隔离的虚拟系统,进行特殊的调试工作.此时,对虚拟系统工作模式的选择就非常重要了.如果 ...
- VMWare虚拟系统上网设置及VMWare虚拟机三种工作模式详解
=========================================================== 很多网友安装了VMWare虚拟机,但是在虚拟机上网问题上却卡住了.要想虚拟机上网 ...
- 讨论.NET Core 配置对GC 工作模式与内存的影响
引出问题: Asp.net core应用在 Kubernetes上内存使用率过高问题分析 Asp.net core应用在 Kubernetes上内存使用率过高问题分析 这篇文章中讨论了,在默认情况下, ...
- Apache 工作模式配置优化
Apahce 工作模式配置 1.查看当前MPM工作模式 /usr/local/apache2/bin/apachectl -VServer version: Apache/2.4.27 (Unix) ...
- rsync的介绍及参数详解,配置步骤,工作模式介绍
rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...
- 【Linux】CentOS系统网络配置—动态、静态配置及vim编辑器的3种工作模式
目录 Centos是什么系统? 相关命令 vim编辑器的3种工作模式 命令模式<-->底线命令模式 命令模式<-->输入模式 配置系统网络(动态) 配置系统网络(静态) 配置动 ...
- Apache优化配置——工作模式
Apache所运行的硬件环境都是对性能影响最大的因素 各个硬件指标中,对性能影响最大的是内存,其次是硬盘的速度 ●Apache的工作模式 1.prefork模式(一个 非线程型的) ⑴.主要工作方式: ...
- esxi ntp服务器地址_NTP的工作原理以及工作模式
NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步.NTP基于UDP报文进行传输,使用的UDP端口 ...
最新文章
- 2022-2028年中国无菌手套产业发展动态及投资趋势预测报告
- 手把手教你写一个生成对抗网络
- [转]SQL truncate 、delete与drop区别
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】...
- FreeRTOS 之 在Cortex-M中应用时的中断优先级设置
- VUE data传值
- Php正则替换字符串
- iphone静音键失灵_知否 | 为何大部分安卓机 都不学iPhone加入静音键?
- 【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)
- GaussDB(for Redis)揭秘:Redis存算分离架构最全解析
- FFmpeg的模块介绍(一)
- easyui---layout实战
- 为啥苹果手机连无线无网络连接服务器,苹果手机网络无法连接怎么回事
- 数据分析面试【统计学】-----假设检验知识点归纳
- 计算机开机检测dhcp,电脑开机显示dhcp是什么意思
- 谷歌文件系统GFS理解
- grub引导安装win10
- javax,java
- 鼎捷t100架构_鼎捷T100发布 打造“互联网+制造”企业智能互联云平台
- hacker_从在Hacker News上展示我的作品中学到了什么