apache的工作模式

什么是apache的工作模式?
 
个人理解:apache的工作模式就是apache在运行时候的内存分配,进程和线程的使用方式。举个例子:一台apache正在运行的服务器,如果有个用户访问这个apache,那么apache是启用一个进程来处理用户的请求呢?还是在已有的进程中启用一个线程来处理该用户的请求?这个选择就是apache的工作模式来确定的。如果指定了某个工作模式比如prefork模式,那么每个用户的请求就要启用一个进程来处理。
 
apache有几种工作模式?怎么查看和修改apache的工作模式?
 
apache的工作模式有:beos,event,worker,prefork,mpmt_os2。
 
在linux(centos)下使用#http �Cl 命令可以查看当前使用的工作模式。也可以使用#apachectl -l命令。
 
#http �Cl
 
 
 
#apachectl �Cl
 
 
 
看到的prefork.c,说明使用的prefork工作模式。
 
可以在编译的时候使用#�Cwith-mpm=prefork对应的工作模式名称来修改工作模式。
 
beos工作模式(跟linux关系不大,或者暂时用不上)
 
在Beos系统上的工作模式,使用一个单独的控制线程来创建和控制处理请求的工作线程。
 
event工作模式(不太稳定,或者说暂时用不上)
 
event模式由于把服务进程从链接中分离出来,在开启KeepAlive场合下相对worker模式能够承受的了更高的负载。event模式为worker开发的变种模式,配置以及指令与worker完全相同。不过event模式不能很好的支持https的访问,有时还会出现一系列的问题。
 
worker工作模式(与php配合不好,或者说暂时用不上)
 
worker模式由于使用线程来进行处理请求,所以能够处理海量请求,而系统资源的开销要小于基于进程的服务器。同时worker模式也使用了多进程,每个进程又有着多个线程,以获得基于进程服务器的稳定性。
 
mpmt_os2工作模式(很少用,或者说暂时用不上)
 
mpmt_os2是专门针对OS/2优化过的混合多进程多线程多路处理模块(MPM) 。
 
prefork工作模式(本篇文章的主角,使用最多而且最稳定的工作模式)
 
prefork工作模式是linux下apache安装时候的默认工作模式,是使用最普遍的工作模式。为了能够简单的明白他的工作原理,下面是一个假设:
 
有一台正在运行的apache服务器,用户A访问该apache的时候apache建立一个新的进程1处理用户A的请求。
 
这时又有一个用户B访问该apache,apache又建立一个新的进程2处理用户B的请求。
 
后来又有用户C,D,E访问该apache,apache又建立三个进程3,4,5处理他们的请求。
 
如果每当一个新用户访问该apache,apache再建立一个新的进程处理用户的请求,是不是太慢了呢?
 
所以apache的prefork模式在apache第一次启动的时候就建立5个进程,等待用户的连接请求,有一个用户访问,就有一个进程处理他的请求。
 
那么如果有5个用户同时访问apache,apache第一次建立的5个进程全部用光了,所以apache就再从新在建立5个进程,等待下一批用户的请求。
 
prefork模式会根据服务器的硬件情况,设定apache最多只能同时建立256个进程。再多的请求就只能等待前面的进程处理完毕在进行处理。
 
假设完毕!
 
上面的假设就是prefork模式的工作原理。但是上面假设中具体的数字不是定死的,而是通过prefork模式的配置来设置的。下面是http.conf中的配置信息。
 
 
 
*带井号的为注释部分
 
prefork模式的几个重要的参数:
 
名称
默认值
说明
 
StartServers
5
apache启动时候默认开始的进程数
 
MinSpareServers
5
最小的闲置进程数
 
MaxSpareServers
10
最大的闲置进程数
 
ServerLimit
256
最大的进程总数(参考,实际看MaxClients)
 
MaxClients
256
最大的进程总数
 
MaxRequestsPerChild
4000
每个进程处理的最多请求数
 
StartServers:这个看了就明白了。
 
MinSpareServers:举个例子就明白了。
 
apache在没有用户访问时候有5个闲置的进程,如果有一个用户访问网站。则闲置的进程就只有4个,这个值小于MinSpareServers,所以apache就以第一秒1个进程,第二秒2个进程,第三秒4个进程的速度新建空闲进程。直到大于等于MinSpareServers个空闲进程才结束。
 
MaxSpareServers:还是举个例子就明白了。
 
apache在没有用户访问时候有5个闲置的进程,如果有5个用户同时访问网站。则闲置的进程就只有0个,这个值小于MinSpareServers,所以apache就以第一秒1个进程,第二秒2个进程,第三秒4个进程的速度新建空闲进程。直到大于等于MinSpareServers个空闲进程才结束。在这个例子中直到第三秒,一共生成1+2+4个进程才能满足大于等于MinSpareServers的要求。后来这5个用户访问完apache,访问结束,关闭浏览器。所以apache就有了5+7个空闲的进程。这时空闲的进程比较多,apache就开始关闭一些进程,直到满足小于MaxSpareServers个空闲进程才结束。如果该值小于MinSpareServers则apache默认将该值设置成MinSpareServers+1。
 
ServerLimit:这个参数是控制apache的进程总数的,那为什么会有两个参数控制apache的进程总数呢?这个参数在apache1的时代是没有的,因为那个时候有个256M内存的服务器就很厉害了。后来apache2的时代到来,服务器的硬件也得到升级。很多服务器都是4G内存,还有很多比4G内存大的服务器出现。apache1的时代只有一个MaxClients参数控制进程总数就够了,而这个参数最大值是256定死了。但是到了apache2的时代必须调整ServerLimit值大于256才能使MaxClient支持大于256的值。
 
MaxClients:apache最大的进程数。apache1的时代只有一个MaxClients参数控制进程总数就够了,而这个参数最大值是256定死了。但是到了apache2的时代必须调整ServerLimit值大于256才能使MaxClient支持大于256的值。
 
MaxRequestsPerChild:举个例子就明白了。
 
apache在没有用户访问的时候有5个空闲进程。当一个用户访问网站,访问完又离开。则apache的第一个进程就处理了一个请求,从新进入闲置状态。再有一个用户访问网站,访问完后离开。则apache的第一个进程就处理了1+1个请求。这样继续访问3998个用户,这个进程就处理了4000个请求,之后就自动关闭这个进程。这个时候apache就只有4个限制的进程,小于MinSpareServers值所以apache从今建立一个空闲进程。至于为什么处理完4000个请求就要关闭这个进程呢?答案之一:为了防止内存的泄露。
 

你可能感兴趣的:(linux,服务器,用户)