apache配置优化之worker工作模式

作者: wxfeng 分类: linux 发布时间: 2018-04-10 00:00

定义

支持混合的多线程多进程的多路处理模块.

使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,一个高流量的HTTP服务器上,worker MPM是个比较好的选择,因为worker MPM的内存使用比Prefork MPM要低得多。但是worker MPM也有缺点,如,一个线程崩溃了,整个进程就会连同其任何线程一起“挂了”,由于线程是共享内存空间,所以一个程式在运行时必须被系统识别为“每个线程是安全的”.

Worker的工作原理及配置
worker是2.0 版中全新支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。

如下为缺省的worker配置段:

StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0

Worker的工作原理:
由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。
如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

Worker conf指令分析:
StartServers              #服务器启动时建立的子进程数
MaxClients                 #允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列默认值是”400″,16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加ServerLimit的值
MaxSpareThreads     #设置最大空闲线程数。默认值是”250″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。
ThreadsPerChild        #每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。
MaxRequestsPerChild    #设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
(1)可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
(2)给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

ServerLimit指令解释

对于preforkMPM,这个指令设置了MaxClients最大允许配置的数值。
对于workerMPM,这个指令和ThreadLimit结合使用设置了MaxClients最大允许配置的数值。

对于preforkMPM,只有在你需要将MaxClients设置成高于默认值256的时候才需要使用这个指令。要将此指令的值保持和MaxClients一样。
对于workerMPM,只有在你需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。
不要将该指令的值设置的比MaxClients
和ThreadsPerChild需要的子进程数量高。如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。
注意:
Apache在编译时内部有一个硬限制"ServerLimit 20000"(对于preforkMPM为"ServerLimit 200000")。你不能超越这个限制。

Maxclient指令解释

对于非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量,默认值是256。
要增大这个值,你必须同时增大ServerLimit 。

对于线程型或者混合型的MPM(也就是beos或worker),MaxClients表示可以用于伺服客户端请求的最大线程数量。
线程型的beos的默认值是50。对于混合型的MPM默认值是16(ServerLimit)乘以25(ThreadsPerChild)的结果。
因此要将MaxClients增加到超过16个进程才能提供的时候,你必须同时增加ServerLimit的值。

Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求
在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中
指定MPM的方法:
#./configure –help|grep mpm
–with-mpm=MPM Choose the process model for Apache to use.
MPM={beos|event|worker|prefork|mpmt_os2| perchild|leader|threadpool}

apache配置安装参数
./configure –prefix=/usr/local/apache2
–enable-rewrite –enable-so –enable-headers
–enable-expires –with-mpm=worker
–enable-modules=most –enable-deflate

–prefix=/usr/local/apache2      #表示指定apache的安装路径,默认安装路径为/usr/local/apache2

–enable-rewrite                         #提供URL规则的重写

–enable-so                                 #激活apache服务的DSO(Dynamic Shared Objects动态共享目标),即在以后可以以DSO的方式编译安装共享模块,这个模块本身不能以DSO方式编译。

–enable-headers                       #提供允许对HTTP请求头的控制。

–enable-expires                        #激活通过配置文件控制HTTP的“Expires:”和“Cache-Control:”头内容,即对网站图片、js、css等内容,提供客户端浏览器缓存的设置。这个是apache调优的一个重要选项之一。

–with-mpm=worker                    #选择apache
mpm的模式为worker模式。为worker模式原理是更多的使用线程来处理请求,所以可以处理更多的并发请求。而系统
资源的开销小可选择基于进程的MPM prefork。如果不指定此参数,默认的模式是prefork进程模式。也可以指定
event模式.这个是apache调优的一个重要选项之一。

–enable-deflate                            #提供对内容的压缩传输编码支持,一般是html、js、css等内容的站点。使用此参数会打打提高传输速度,提升访问者访问的体验。在生产环境中,这是apache调优的一个重要选项之一

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注