ubuntu上使用apache的worker模式来提高并发能力

  1. 安装Apache的fcgid模块,使用它来启用PHP。

    apt-get install libapache2-mod-fcgid

    1. 设置fcgid模块的配置文件,使其能够调用PHP。

    vim /etc/apache2/mods-available/fcgid.conf

    将文件内的原来文本全部删除掉,然后添加下面的文本:

    AddHandler fcgid-script .php .py .pl .fcgi SocketPath /var/lib/apache2/fcgid/sock IPCConnectTimeout 20 3. 安装php5-cgi。

    apt-get install php5-cgi

    1. 设置Apache的配置文件,使其能够调用fcgid模块来启动PHP。

    vim /etc/apache2/apache2.conf

    在文件最后添加下面的内容:

    FCGIWrapper /usr/bin/php5-cgi .php Options ExecCGI SymLinksIfOwnerMatch 5. 安装Apache的Worker MPM模块。

    apt-get install apache2-mpm-worker

    需要注意的是,如果之前有安装了php5-gd和php5-mysql模块,Ubuntu在配置Apache的Worker模式的时候可能会将其卸载,可以重新安装一次以防万一:

    apt-get install php5-gd php5-mysql

    这样就成功的完成了Apache的Worker MPM模块配置工作,现在Apache将会以Worker模式运行了。你会发现你的站点负载能力又会大大的提升,内存资源也会充裕很多了。 注: MPM是Apache2引入的一个概念,就是将结构模块化。把核心任务处理作为一个可插拔的模块,即MPM,使其能针对不同的环境进行优化。 在这个情况下,就诞生出了处理模式的概念。处理模式现在分为Prefork、Worker、Event三种。

    Prefork MPM基于非线程模型,和Apache 1.x版本中的处理方式很相似。 Prefork MPM在所有情况下都很安全,对运行非线程安全(non-thread-safe)模式的软件如PHP,它是唯一的安全选择。 对于某些应用程序,包括在 Apache 1.3上非常流行的程序(如简单静态页面、CGI脚本等),Prefork MPM是最好的选择。 另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。 但是由于每一个请求都会产生一个新的进程,导致系统资源(尤其是内存)消耗的很快,一旦并发量较大的时候,大量的Apache进程会占用巨大的内存空间。

    而Worker MPM基于线程模式,具有内存消耗低(对繁忙的服务很重要)、扩展性在某些特定应用情况下比Prefork更好等优点。 在这个模式下,采用的进程和线程混合的形式处理请求。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的Prefork模式。

    以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载, 但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。 在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。 一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。

参考:1.