APACHE查看和更改正在使用的MPM(PREFORK, WORKER, EVENT)
kevin.Zhu 发布于:2013-9-29 23:47 分类:Apache 有 18 人浏览,获得评论 0 条
首先,MPM是Multi-Processing Modules,表示Apache中的多路处理模块,目前在Linux上的Apache 2.2/2.4中包括三种模式:prefork、worker和event模式。
在使用Apache时,如何才能知道是在使用哪种MPM模式呢?
其实,apache或httpd的命令参数“-l”即可列出当前apache中已经编译了的模块,由于MPM只能在编译时指定其中一种,所以列出的静态模块中MPM只有1个,如下所示:
另外,“ httpd -t -D DUMP_MODULES ”命令可以查看httpd加载的所有模块(包括静态编译的和动态共享的模块)。
在一些发行版的Apache安装时,可能不仅安装了prefork模式的httpd,也可能安装有worker/event模式的httpd供用户根据实际需要来选择。比如RHEL6.4中的httpd安装包就是同事提供了worker和event模式的httpd程序,如下所示:
在RHEL系统中,可以很容易地配置httpd服务对prefork、worker和event等3种模式来进行选择。
编辑 /etc/sysconfig/httpd 文件,可以将 “HTTPD=/usr/sbin/httpd.worker”这行取消注释,然后重启httpd服务,即可使用到woker模式的httpd了;不过可能使用worker模式的httpd会与PHP的一些东西存在兼容性而导致httpd服务不能启动,如下所示,是需要安装 php-zts 软件包。
在Apache编译时,做configure这一步,可以加上”–with-mpm=event”来将event编译作为MPM编译进去,同样也可以选择prefork和worker。另外,也可以将多个MPM编译为共享模块,configure中的参数为:–enable-mpms-shared=MPM-LIST (如:–enable-mpms-shared=’prefork worker’, –enable-mpms-shared=all)。
prefork, worker, event 三种模式的区别:
1. prefork 中没有线程的概念,是多进程模型,一个进程处理一个连接;稳定;响应快。其缺点是在连接数比较大时就非常消耗内存。
2. worker 是多进程多线程模型,一个进程有多个线程,每个线程处理一个连接。与prefork相比,worker模式更节省系统的内存资源。不过,需要注意worker模式下的Apache与php等程序模块的兼容性。
3. event 是worker模式的变种,它把服务进程从连接中分离出来,在开启KeepAlive场合下相对worker模式能够承受的了更高的并发负载。event模式不能很好的支持https的访问(HTTP认证相关的问题)。