threaded模式下,比prefork模式要省资源
分类: 系统运维
最近用django开发了一套广告投放系统,这套系统其实是一套网络广告联盟系统,包括广告的投放、管理、统计、防作弊、跟踪等等。硬件是一台 DELL的PC Server(双核Xeon1个,2G内存),操作系统是redhat as4,其他的还有nginx 0.5.33,python 2.5,mysql 5.0.41,django是10月份左右从svn trunk取下来的。
开始的时候系统运行在apache + mod_python下,后来因为负荷的问题,改成了nginx + fastcgi +django的模式。其中django fastcgi运行在prefork模式下,maxchildren=10,nginx通过tcp socket连接fastcgi进程。一段时间内,系统跑的都不错,load average一直在1以下,当时整个系统的广告点击、显示大概在300w/day。
很快流量上去了,几个大站一加入联盟,系统负荷立刻上去了,不算静态文件,差不多达到2000w/day。更要命的是,频频出现502 Gateway Error。尝试着增加maxchildren,但是因为这台机器内存不太大,只有2G,其中一小半分给了mysql,还有一部分统计、分析程序也跑在这 个服务器上,maxchildren也不能加的太大。被逼急了,把django fastcgi切换到threaded模式,并且调整了一些参数,居然撑住了!以下是一点小结:
1、django fastcgi运行在threaded模式下,比prefork模式要省资源
2、以前盛传threaded模式不稳定,但是现在已经有所好转。详情可以看http://www.pkblogs.com/timchen119/2007/06/thread-dying-problem-may-fixed-in.html
3、django fastcgi模式下maxchildren参数决定了你的服务能同时处理多少个请求(nginx处理的静态文件除外)。如果请求数超过了maxchildren的设置,就可能出现502错误。maxchildren的缺省值是50
4、打开nginx的status模块,可以监控nginx的一些状态,比如:
Active connections: 5620
server accepts handled requests
882256 882256 1300056
Reading: 35 Writing: 133 Waiting: 5452
Active
connections指当前的活动连接数,这个数应该等于第四行的三个数之和。第四行的三个数中,Reading表示正在从客户端读取数据的链接数
目,Writing表示正在向客户端返回数据的链接数目,Waiting通常是因为KeepAlive,处于等待下个请求的链接数目。
Reading+Writing的数目=dajngo处理的请求+nginx处理的静态文件请求。可以根据Reading+Writing来设置
maxchildren数目。
5、如果django运行在threaded模式下,并且负荷很高,只起一个fastcgi进程可能是不够
的,一是可能不稳定,二是GIL的限制。因此,可能需要起多个运行在threaded模式的fastcgi进程。我现在临时的做法是用一个nginx虚拟
主机做反向代理,后面是多组nginx+django threaded fastcgi。回头可以考虑调整一下。
6、nginx通过unix socket和fastcgi通信,比tcp socket要高效,重负荷下可以考虑。
关于prefork和threaded模式,最近有些新的想法,请参考http://blog.csdn.net/FeiSan/archive/2008/01/23/2061208.aspx
threaded模式下,比prefork模式要省资源的更多相关文章
- Objective-C 工厂模式(下) -- 抽象工厂模式
相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...
- Apache的prefork模式和worker模式(转)
prefork模式这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求 ...
- Apache的prefork模式和worker模式
prefork模式这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求 ...
- ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述
★PART1:32位保护模式下任务的隔离和特权级保护 这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...
- 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...
- 微软Azure 经典模式下创建内部负载均衡(ILB)
微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...
- 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转
昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...
- win10 下visual studio 2015 在调试模式下不能跟踪源文件
win10 下visual studio 2015 在调试模式下不能跟踪源文件,只要一调试就会关闭(隐藏)打开的文档,非常不方便.经过一番折腾,发现是配置的问题. 如果安装多个版本的VS,请删除对应版 ...
- 转:IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
IE兼容模式下 SCRIPT1028: 缺少标识符.字符串或数字例如下面一段代码 var a = { x: 1, y: 2,};alert(a.x);如果在IE的兼容性视图(IE7文档模式 ...
随机推荐
- 在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习
首先说明这篇文章不是出自我手,大家共同学习. 引用地址:http://oss.org.cn/?action-viewnews-itemid-61998. C++开源库,欢迎补充. C++在“商业应用” ...
- ant条件逻辑
<condition property="sdk-folder" value="E:\android\android-sdk\adt-bundle-windows- ...
- 关于CSS中的PX值(像素)
场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...
- c++ 进程权限的提升
//提升权限 void CManageProcessDlg::DebugPrivilege() { HANDLE hToken = NULL; //打开当前进程的访问令牌 int hRet = ...
- Python 初学——V_Rename(第一个完整的python程序)
我在大一的时候就对python非常感兴趣,就是一直没有时间和机会去学习下,只是了解些表面的东西,今天早上整理电脑的时候发现文件夹里面的文件名是这样子的,有点小不舒服,特别想去除重复的"Str ...
- [转]init.d解析
本文为转载,放在这里以备忘. init.d指的是/etc/rc.d/init.d目录.本文包括3部分内容1. Linux的引导过程2. 运行级别3. /etc/rc.d/ 与/etc/rc.d/ini ...
- WPF 一个弧形手势提示动画
这是一个操作提示动画,一个小手在屏幕上按照一个弧形来回运动 <Window x:Class="LZRichMediaWall.MainWindow" xmlns=" ...
- Arrays.asList方法总结
import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相 ...
- 使用PHP计算上一个月的今天
一日,遇到一个问题,求上一个月的今天. 最开始我们使用 strtotime(“-1 month”) 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误. 比如:2011-03-31,得到的结果 ...
- php中const与define的使用区别 详解
1.const用于类成员变量定义,一旦定义且不能改变其值.define定义全局常量,在任何地方都可以访问. 2.define不能在类中定义而const可以. 3.const不能在条件语句中定义常量 i ...