【Apache】Apache MPM模块prefork和worker的区别与配置

TangLu 未命名 2017-06-04 5867 0

在httpd 2.2版本中是不支持同时编译多个MPM模块的,只能编译要使用的那个,默认是prefork工作模型,另外还有worker和event模块可使用,只不过在2.2中event还在测试阶段,到2.4才正式使用,所以本文所讲是httpd 2.2中的worker和prefork模块

如何查看Apache当前工作模块:

1、查看静态编译的模块:httpd -l

QQ图片20140617112429.jpg

 2、查看静态及动态编译的模块:httpd -M

 

prefork和worker的区别:

prefork是非线程、多进程处理模块。

prefork会预先生成一些子进程,每个进程在同一个时间点只能处理一个请求,会根据并发需求生成更多进程来完成工作。消耗内存资源更大,但是更为高效稳定。

 

worker是线程化、多进程处理模块。

每个进程生成多个线程,每个线程响应一个请求,内存资源消耗小,效率没有prefork高,但是现在内存资源已经很充足,所以worker模块使用较少。

 

如何切换MPM模块:

1、httpd2.2版本修改MPM模块的方法:
(1)、首先使用httpd -l来查看当前模块是prefork,使用 ps aux 查看httpd进程也可以得知。
(2)、编辑/etc/sysconfig/httpd文件,取消以下一行的注释,修改为所需要MPM模块。

HTTPD=/usr/sbin/httpd.worker


(3)、重新启动httpd服务,使用ps aux命令查看当前进程,可以看到修改已经生效了。

2、httpd2.4版本修改MPM模块的方法

在编译安装httpd2.4时,构建MPM模块通常有两种选择,一种是把MPM编译成静态模块,还有一种是把MPM编译成动态模块。如果把MPM编译成了静态模块(编译安装时有指定--with-mpm=NAME,那么要改变MPM只能通过重新编译安装httpd修改。如果在编译安装httpd时把MPM编译成了动态模块(编译安装时指定--enable-mpms-shared选项),那么可以在/etc/httpd/httpd.conf配置文件中编辑LoadModule指令选择不同的MPM重新载入即可。在httpd2.4中MPM模块的配置文件为/etc/httpd/extra/httpd-mpm.conf。

三种模块参数说明:

httpd2.2中prefork和worker各参数说明如下:

<IfModule prefork.c>  如果prefork.c模块存在,则定义在标签内的参数有效
    StartServers:     服务开启时默认启动的工作进程数,不包括主进程
    MinSpareServers:  最少空闲进程数;
    MaxSpareServers:  最大空闲进程数;
    ServerLimit:      最大活动进程数;
    MaxClients:       并发请求的最大数,一条进程最多能处理多少个请求
    MaxRequestsPerClient: 每个子进程在生命周期内所能够服务的最多请求个数
</IfModule>

<IfModule worker.c>  如果worker.c模块存在,则定义在标签内的参数有效
    StartServers:   服务器开启时,启动的子进程的个数
    MaxClients:      并发请求的最大数;
    MinSpareThreads:最小空闲线程数;
    MaxSpareThreads:最大空闲线程数;
    ThreadsPerChild:每个子进程可生成的线程数;
    MaxRequestsPerChild:每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定;
</IfModule>



httpd2.4中event参数说明如下:

<IfModule mpm_event_module>
    StartServers             默认进程数
    MinSpareThreads          最小空闲线程数
    MaxSpareThreads          最大空闲线程数
    ThreadsPerChild          每个子进程可以生成的线程数
    MaxRequestWorkers        最大线程数量
    MaxConnectionsPerChild   子进程的最大连接数,当达到设置值以后,APACHE就会结束当前的子进程
</IfModule>


评论