Apache Prefork、Worker和Event三种MPM详解

2019-01-17 03:51:47王冬梅

  Prefork 是UNIX平台上默认的MPM,它所采用的预派生子进程方式也是apache 1.3中采用的模式。prefork 本身并没有使用到线程,2.0 版本使用它是为了与1.3版保持兼容性;另一方面,perfork用单独的子进程来处理不同的请示,之程之间是彼此独立的,这也使其成为最稳定的MPM之一 。

如何查看当前安装的Apache的MPM工作模式。


[root@localhost apache]# httpd -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c

如果你看到perfork.c 则表示当前为perfork MPM模式。worker.c 则表示为 worker MPM模式。

那么如何设置apache的MPM呢?

需要的apache 配置安装的时候需要指定模式:


[root@localhost httpd-2.4.1]# ./configure --prefix=/usr/local/apache2worker --enable-so --with-mpm=worker
  [root@localhost httpd-2.4.1]# make
  [root@localhost httpd-2.4.1]# make install

指定--with-mpm=NAME 选项指定MPM,NAME就是你想使用的MPM的名称。不指定模式的话,默认为Prefork MPM。

那么如何配置成Event MPM?

同我上面的方法一样,只需要在安装的时候加上以下参数: --enable-nonportable-atomics=yes

需要注意的是Event MPM对于老的CPU可能是不支持的。


三种MPM参数分析 

不管你安装的是apache哪种MPM

在安装完成之后打开.../apache/conf/extra/httpd-mpm.conf文件,找到如下配置:

# perfork MPM


<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>


# StartServers:  数量的服务器进程开始
# MinSpareServers:  最小数量的服务器进程,保存备用
# MaxSpareServers:  最大数量的服务器进程,保存备用
# MaxRequestWorkers:  最大数量的服务器进程允许开始
# MaxConnectionsPerChild:  最大连接数的一个服务器进程服务

prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两 个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式 可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。