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的工作模式和配置相关推荐

  1. Apache之三种工作模式和配置性能优化

    1 Apache的3种模式和版本 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式,它们分别是prefork,worker和event. 我 ...

  2. 把虚拟系统接入网络 虚拟系统工作模式

    如果你想利用VMWare在局域网中新建一个独立的虚拟服务器,为局域网用户提供网络服务;或者想创建一个与网内其他机器相隔离的虚拟系统,进行特殊的调试工作.此时,对虚拟系统工作模式的选择就非常重要了.如果 ...

  3. VMWare虚拟系统上网设置及VMWare虚拟机三种工作模式详解

    =========================================================== 很多网友安装了VMWare虚拟机,但是在虚拟机上网问题上却卡住了.要想虚拟机上网 ...

  4. 讨论.NET Core 配置对GC 工作模式与内存的影响

    引出问题: Asp.net core应用在 Kubernetes上内存使用率过高问题分析 Asp.net core应用在 Kubernetes上内存使用率过高问题分析 这篇文章中讨论了,在默认情况下, ...

  5. Apache 工作模式配置优化

    Apahce 工作模式配置 1.查看当前MPM工作模式 /usr/local/apache2/bin/apachectl -VServer version: Apache/2.4.27 (Unix) ...

  6. rsync的介绍及参数详解,配置步骤,工作模式介绍

    rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...

  7. 【Linux】CentOS系统网络配置—动态、静态配置及vim编辑器的3种工作模式

    目录 Centos是什么系统? 相关命令 vim编辑器的3种工作模式 命令模式<-->底线命令模式 命令模式<-->输入模式 配置系统网络(动态) 配置系统网络(静态) 配置动 ...

  8. Apache优化配置——工作模式

    Apache所运行的硬件环境都是对性能影响最大的因素 各个硬件指标中,对性能影响最大的是内存,其次是硬盘的速度 ●Apache的工作模式 1.prefork模式(一个 非线程型的) ⑴.主要工作方式: ...

  9. esxi ntp服务器地址_NTP的工作原理以及工作模式

    NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步.NTP基于UDP报文进行传输,使用的UDP端口 ...

最新文章

  1. 2022-2028年中国无菌手套产业发展动态及投资趋势预测报告
  2. 手把手教你写一个生成对抗网络
  3. [转]SQL truncate 、delete与drop区别
  4. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】...
  5. FreeRTOS 之 在Cortex-M中应用时的中断优先级设置
  6. VUE data传值
  7. Php正则替换字符串
  8. iphone静音键失灵_知否 | 为何大部分安卓机 都不学iPhone加入静音键?
  9. 【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)
  10. GaussDB(for Redis)揭秘:Redis存算分离架构最全解析
  11. FFmpeg的模块介绍(一)
  12. easyui---layout实战
  13. 为啥苹果手机连无线无网络连接服务器,苹果手机网络无法连接怎么回事
  14. 数据分析面试【统计学】-----假设检验知识点归纳
  15. 计算机开机检测dhcp,电脑开机显示dhcp是什么意思
  16. 谷歌文件系统GFS理解
  17. grub引导安装win10
  18. javax,java
  19. 鼎捷t100架构_鼎捷T100发布 打造“互联网+制造”企业智能互联云平台
  20. hacker_从在Hacker News上展示我的作品中学到了什么

热门文章

  1. c++中STL的常用算法---2(遍历算法,查找算法)
  2. Java虚拟机学习集锦是我攒来的,带你碾压面试官!
  3. 从新手到Flutter架构师,一篇就够!吐血整理
  4. Codeforces 408D Long Path (DP)
  5. Codeforces Round 493
  6. PullToRefreshListView中嵌套ViewPager滑动冲突的解决
  7. 微信客户端<->腾讯微信服务器<->开发者服务器
  8. java 多线程阻塞队列 与 阻塞方法与和非阻塞方法
  9. 51nod 1100:斜率最大
  10. lambda显式声明返回值