关于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. 使用Linux系统中的SSH服务

    使用Linux系统中的SSH服务 1.SSH服务应用场景 ① 可以实现对文件的上传与下载 ② 实现远程管理Linux 2.安装SSH服务器 服 务:sshd 位 置:光盘2 软 件:openssh-s ...

  2. String中重要方法与字段

    下列这段代码已全部包含了我要写的String类中重要的字段: //StringMisc.java// This program demonstrates the length, charAt and ...

  3. 分布式PostGIS系列【2】——pgpool-II

    一.pgpool-II简介 二.pgpool-II安装与配置 三.分布式Postgis性能测试

  4. CityEngine2012(32位)安装

    今天下午把CityEngine2012装好了,既然Esri大力推CityEngine作为其三维建模软件,那就学习一下,还好没花多长时间搞定破解版,以前装Erdas,南方CASS,AutoCAD那些该死 ...

  5. 编译内核模块出现error: negative width in bit-field 错误

    今天在写一个简单的内核测试模块的时候出现了一个挺奇怪的问题,网上查了一下也没人解决,自己试了好久终于解决了,所以分享出来供大家参考,先贴出源码: /************************** ...

  6. bootstrap时间插件 火狐不显示 完美解决方法

    原文链接:http://www.phpbiji.cn/article/index/id/141/cid/4.html bootstrap时间插件火狐 bootstrap-datetimepicker火 ...

  7. 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法

    $x_pi = 3.14159265358979324 * 3000.0 / 180.0; //火星坐标系 (GCJ-02)转百度坐标系 (BD-09)算法 function bd_encrypt($ ...

  8. 第四届蓝桥杯C/C++A组题目:振兴中华

    首先把题目贴上来吧! 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见图1) 从我做起振 我做起振兴 做起振兴中 起振兴中华 图1 比 ...

  9. flex基础学习

    Flex是Adobe开发的一种RIA,富互联网应用,用Flex开发的东西都可以使用Flash做出来,但是Flex主要是面向的程序开发人员,前台使用ActionScript和MXML. 上面介绍了fle ...

  10. 用泛型的IEqualityComparer<T>接口去重复项

    提供者:porschev 题目:下列数据放在一个List中,当ID和Name都相同时,去掉重复数据 ID Name 1  张三 1  李三 1  小伟 1  李三  2  李四 2  李武 ----- ...