Apache常用2种工作模式prefork和worker比较

Apache两种常用工作模式:prefork和worker。

prefork MPM

prefork是一个非线程型的、预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大。

可通过了解prefork的配置认识prefork,配置位置:apache/conf/extra/httpd-mpm.conf

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

参数:

–StartServer:服务器启动时一次建立的子进程数量

–MinSpareServers:设置空闲子进程的最小数量。如果当前空闲子进程数少于这个值,那么Apache会从一秒创建一个进程,第二秒继续创建两个…直到满足MinSpareServers设置的值为止。不需要设的太大。

–MaxSpareServers:设置空闲子进程的最大数量。如果空闲子进程数量超过MaxSpareServers,apache则会kill掉多余空闲子进程。

–MaxClients:设定apache同一时间处理的最大请求数量。任何超过MaxClients的请求都将进入等候对列。默认最大为256,要设置大于256时,必须同时设置ServerLimit(保持ServerLimit大于或等于MaxClient)。如果发现请求处理很慢但系统资源使用少,就需要调高这个参数。

–MaxRequestsPerChild:每个子进程最多处理的请求数量,到达这个值,子进程将会自动结束,这样可以避免内存泄漏。设为0则永远不结束。

–ServerLimit:用于限制MaxClient,最大值为20000,超过了就需要修改apache内核重新编译。注意此参数必须放在其他参数之前。

最重要的值是MaxClients允许足够多的工作进程,同时又不会导致服务器当机。
可通过查看httpd进程数:#ps -ef | grep httpd | wc -l,选择高峰期,结合当时服务器资源使用情况,来设置MaxClients。

worker MPM

worker是支持混合的多线程多进程的多路处理的MPM,使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只处理一个连接,内存使用较低,但一个线程崩溃,就会影响同一个进程下的所有线程。

同样通过配置认识worker

<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

参数:

–StartServer:服务器启动时一次建立的子进程数量

–MaxClients:设定apache同一时间处理的最大请求数量,这里是指最大线程数量,大小仍受ServerLimit限制且必须是ThreadsPerChild的倍数。

–MinSpareThreads:设置最少的空闲线程数

–MaxSpareServers:设置最大的空闲线程数,必须大于等于MinSpareThreads加上ThreadsPerChild的和(因为每个子进程拥有的线程数是固定的)

–ThreadsPerChild:每个子进程建立的常驻线程,之后不会再创建新的线程。大小受ThreadLimit限制。

–MaxRequestsPerChild:每个子进程最多处理的请求数量,同prefork的一样

–ServerLimit:服务器允许配置的进程数上限,和ThreadLimit共同限制MaxClients(MaxClients <= ServerLimit * ThreadsPerChild)。

–ThreadLimit:TreadsPerChild可以配置的线程数上限,默认为64。

根据网友一些测试数据,实际情况下还是选prefork工作模式较好。

默认情况下,Linux下的Apache是prefork模式,切换成worker模式步骤如下:

prefork和worker模式的切换

1.将当前的prefork模式启动文件改名

mv httpd httpd.prefork

2.将worker模式的启动文件改名

mv httpd.worker httpd

3.修改Apache配置文件

vim /usr/local/apache2/conf/extra/httpd-mpm.conf

找到里边的如下一段,可适当修改负载等参数:

<IfModule mpm_worker_module>
	StartServers 2
	MaxClients 150
	MinSpareThreads 25
	MaxSpareThreads 75
	ThreadsPerChild 25
	MaxRequestsPerChild 0
</IfModule>

4.重新启动服务

/usr/local/apache2/bin/apachectl restart

即可换成worker方式启动apache2

处于稳定性和安全性考虑,不建议更换apache2的运行方式,使用系统默认prefork即可。另外很多PHP模块不能工作在worker模式下,例如redhat Linux自带的PHP也不能支持线程安全。所以最好不要切换工作模式。

网友评论:

for redhat
在 /etc/sysconfig/httpd 打开 #HTTPD=/usr/sbin/httpd.worker 的注释

请教 .mpm_worker +mod_php 有在用到生产么?

worker mpm一般不会跟mod_php搭配,worker mpm一般都是跟apache的mod_fcgid 搭配,然后PHP要安装php-cgi 来跑PHP的。



海哥CentOS博客的LAMP一键安装包写到:

++++++++++++++++++++++++++++++++++++++++++++++++
echo "select the mpm of apache"
echo "1) prefork (Recommend)"
echo "2) worker (Multi-threaded)"
echo "3) event (Multi-threaded,not support ssl.)"
++++++++++++++++++++++++++++++++++++++++++++++++

延伸阅读:

Apache prefork 模块指令分析

时间: 2024-08-24 02:15:15

Apache常用2种工作模式prefork和worker比较的相关文章

关于Apache的两种工作模式prefork和worker

prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求. 这个MPM具有很强的自我调节能力,只需要很少的配置指令调整.最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小. worker模式 此多路处理模

apache常用的两种工作模式 prefork和worker

apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式 一.两种模式 prefork模式: prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程.每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大. 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性

Centos7之Apache的三种工作模式

Apache工作模式简介 Apache 2.X 支持插入式并行处理模块,称为多进程处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性. Apache的三种工作模式 1.prefork模式 prefork是一个非线程型的.预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大. 优点: 适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每

Apache的三种工作模式

Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. 它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展. 如何查看我们的Apache的工作模式呢?可以使用httpd -V 命令查看,如我安装的Apache 2.4版本. $ /usr/local/apache24/bin/httpd -V Server version: Apache/2.4.18 (Unix) Server buil

(转载)关于Apache 的两种工作模式

今天在查看服务器的时候,发现服务器http请求数 每天增长越来越多,在优化集群服务器的时候,查看到Apache 的工作模式是prefork,于是想到了worker 模式, 想暂时的把当前运行模式改成worker 试试 ,暂时缓解下... 关于这两种模式的介绍  就不写了,网上已经很多 转载即可 地址:http://www.ccvita.com/339.html 内容如下: apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork

Apache 两种工作模式 :prefork 、 worker

前言 1·最近这几篇文章都在讲Apache的一些安全与优化,这些针对服务器都是很重要的,掌握这些不仅提升了服务器的安全,还让服务器的性能大大的提高.这样就可以让客户有很好的体验感.2·今天这篇文章依旧是讲Apache.但是,是讲Apache的优化深入.Apache 的默认配置保证基本运行服务,但是在实际生产环境中,有时候需要把服务器性能发挥到最大化. Apache的两种工作模式:(prefork.worker) 很多朋友都知道Apache是当下Web服务器用得最广泛也是最稳定的开源软件之一,其中

Apache三种工作模式介绍与配置

Apache三种工作模式介绍与配置 一.Apache的三种工作模式介绍及相关查看方法 1.Apache三种工作模式简介 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式.它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展. Apache在configure配置编译参数的时候,可以使用 --with-mpm=prefork|worker|event 来指定编译为那一种MPM,当然也可以用编译为三种

Apache三种工作模式

Apache的三种工作模式分别是:prefork.worker.event. 1. prefork模式(默认模式) profork模式实现了一种非线程.预派生的Web服务器,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个进程出现问题不会影响到其他请求. 2. worker模式 worker模式使用多个子进程,每个子进程有多个线程.由于使用的是线程去处理请求,消耗内存小,适合高流量的请求,但是如果某个进程出现问题,那么这个进程下的线程都会出现问题,即稳定性不是很好. 3. even

Apache 三种工作模式介绍

三种MPM介绍                                                                              Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性. Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似