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文档模式 ...
随机推荐
- (转)TeamCity配置笔记
1.编译sln 2.发布网站 3.重复代码检测 4.代码分析 5.单元测试&覆盖率测试 查看代码覆盖率 7.代码签入时自动触发编译 8.通知 1.在teamcity安装目录中找到TrayNot ...
- HTML5/jQuery动画应用 3D视觉效果
今天我们要来分享几款很酷的HTML5/CSS3动画应用,虽然不是HTML5 3D应用,但也有3D的视觉效果.HTML5结合jQuery,让网页应用变得更加强大了.一起来看看这些HTML5/jQuery ...
- 内核中读取UTC时间
记录这个知识点的原因是因为项目中需要保存充电日志,因此,趁着这个机会,深入了解一下Linux的时间系统. UTC:(Universal Time Coordinated) 协调世界时的缩写 ...
- VC按钮控件实现指示灯效果
VC为按钮控件添加图片的方法有很多种: 直接调用SetBitmap: CButton pButton->SetBitmap(hBitmap); 使用CButtonST控件: 使用CDC: 使用 ...
- git 终端常输入命令
cd 输入命令 ls 返回目录 git add . 相当于保存代码 git commit -m "" 相当于提交 get pull把服务器上代码拉回本地代码. get pust 刷 ...
- TCP之Socket的编程
Socket是网络编程的一个抽象的概念,通常我们用Socket来表示服务器与客户端间的网络连接, 即用Socket表示"打开了一个网络连接", 而打开一个网络连接需要知道目标电脑的 ...
- C# 条码标签打印程序,RDLC报表动态显示多条码标签的方法
初学c#,因最近公司客户要求原出货标签需实现条码化,练手的机会来了,遂动手做这个程序,开始都是一些增删改查操作一直很顺利,但到RDLC报表将条码显示到报表上犯难了,因为初学未接触过报表,上网查资料均一 ...
- HBase多条件筛选查询方案
最近的项目需要使用Hbase做实时查询,由于Hbase只支持一级索引,也就是使用rowkey作为索引查询,所以对于多条件筛选查询的支持不够,在不建立二级索引的情况下,只能使用Hbase API中提供的 ...
- js获取location.href的参数实例代码
本文为大家介绍下js如何获取location.href的参数,需要注意的是去掉参数里最开头的?号,具体实现如下,有需要的朋友可以参考下,希望对大家有所帮助 window.location.search ...
- DOS命令之----Netstat+Task以及相关使用
作为一个初步接触电脑的人,在学习Android的过程中,遇到各种问题,今天遇到了.这样一个错误提示: The connection to adb is down, and a severe error ...