关于nginx + fastcgi + django 2009-03-10 17:14:43

分类: 系统运维

最近用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模式要省资源的更多相关文章

  1. Objective-C 工厂模式(下) -- 抽象工厂模式

    相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...

  2. Apache的prefork模式和worker模式(转)

    prefork模式这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求 ...

  3. Apache的prefork模式和worker模式

    prefork模式这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求 ...

  4. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  5. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  6. 微软Azure 经典模式下创建内部负载均衡(ILB)

    微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...

  7. 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转

    昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...

  8. win10 下visual studio 2015 在调试模式下不能跟踪源文件

    win10 下visual studio 2015 在调试模式下不能跟踪源文件,只要一调试就会关闭(隐藏)打开的文档,非常不方便.经过一番折腾,发现是配置的问题. 如果安装多个版本的VS,请删除对应版 ...

  9. 转:IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字

    IE兼容模式下 SCRIPT1028: 缺少标识符.字符串或数字例如下面一段代码 var a = {    x: 1,    y: 2,};alert(a.x);如果在IE的兼容性视图(IE7文档模式 ...

随机推荐

  1. [javascript|基本概念|Object]学习笔记

    对象:数据和功能的集合 创建对象:new 对象类型名称 e.g.: var o = new Object(); 或 var o = new Object(省略(),不推荐) 或 var o = {}( ...

  2. http: URL、请求方式

    URL:统一资源定位符,可以从互联网得到和访问资源,是标准资源的位置 结构包括协议.服务器名称(IP地址).端口(有的服务器需要).路径.文件名 协议:告诉浏览器如何处理打开的文件,常用的就是http ...

  3. 7款震撼人心的HTML5文字特效

    1.CSS3五彩文字特效 文字带阴影效果 这是一款非常具有卡通形象的CSS3五彩文字特效,虽然没有迷人的动画效果,但是五彩缤纷的文字展现在屏幕上也是非常酷的,再加上每一个文字都有不同角度的阴影效果,加 ...

  4. C++使用类型代替枚举量

    自己写的C++类型枚举量,可以使用类型识别取代模板,绑定枚举量和多组调用函数,在调用阶段只要指定某组函数就可以根据枚举量调用相应函数. 代码如下: #ifndef __MYENUM_H__ #defi ...

  5. Poj OpenJudge 百练 1062 昂贵的聘礼

    1.Link: http://poj.org/problem?id=1062 http://bailian.openjudge.cn/practice/1062/ 2.Content: 昂贵的聘礼 T ...

  6. 如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密

    前言 VS开发的源代码安全性,是很多开发者头痛的事情.于是保护好源代码便成了开发者们最关心的事情之一了. 在网上搜一搜,很多有不少的第三方工具可以为源代码加密.加密方式不外乎就是混淆,加壳. 理论上, ...

  7. Freezable 对象(WPF)

    # Freezable 对象(WPF) # > Freezable 继承自 DependencyObject,同时添加了 Freezable 方法,用于冻结对象. --- ## 冻结对象 ## ...

  8. document.write() 和 document.writeln() 区别

    写javascript页面时,看到这两个函数,第一感觉应该是一个换行,一个不换行, 但是实际使用时是一样的(writeln()函数在浏览器页面会多一个空格而不是换行). 简单搜索查阅了下: 查看源 d ...

  9. jquery效果- 显示和隐藏 淡入淡出 滑动 隐藏

    jQuery 效果- 隐藏和显示:hide() 和 show() 规定隐藏/显示的速度,可以取以下值:"slow"."fast" 或毫秒 您可以使用 toggl ...

  10. Hbase 0.98集群搭建的详细步骤

    准备工作 Hbase的搭建是依赖于Hadoop的,Hbase的数据文件实际上存储在HDFS文件系统中,所以我们需要先搭建hadoop环境,之前的博文中已经搭建过了(详见http://www.cnblo ...