Apache服务器中prefork和worker工作模式
1.PMPMPM(Multi -Processing Modules,多路处理模块)是Apache2.x中影响性能的最核心特性。
是Apache 2.x才支持的一个可插入的并发模型,在编译的时候,我们只可以选择一个并发模型。
Unix/Linux支持三种MPM,Prefork,worker,event
2.Prefork:
# prefork MPM
判断是否有prefork.c这个模块,有就生效,否则无效
StartServers 8 默认启动的工作进程数
MinSpareServers 5 最少空闲进程数
MaxSpareServers 20 最大空闲进程数
ServerLimit 256 最大活动进程数
MaxClients 256 最多允许发起的请求连接数
MaxRequestsPerChild4000 每个子进程在生命周期能服务的最多请求数
root 18980.00.3 18635617:23 0:00 /usr/sbin/httpd :这是主进程
apache 19010.00.2 18648817:23 0:00 /usr/sbin/httpd :这些和以下的都是子进程
apache 19020.00.2 18648817:23 0:00 /usr/sbin/httpd
apache 19030.00.2 18648817:23 0:00 /usr/sbin/httpd
apache 19040.00.2 18648817:23 0:00 /usr/sbin/httpd
apache 19050.00.2 18648817:23 0:00 /usr/sbin/httpd
apache 19060.00.2 18648817:23 0:00 /usr/sbin/httpd
apache 19070.00.2 18648817:23 0:00 /usr/sbin/httpd
apache 19080.00.2 18648817:23 0:00 /usr/sbin/httpd Prefork是一个进程处理一个请求,在启动httpd的时候,如果选择的是这种模式,会首先创建一个主进程(控制进程)和StartServers个子进程,如代码段2,可以看到StartServers为8个.由于进程和进程之间是独享内存的,所以一个进程崩溃了不会影响到其他的进程,所以Prefork模式的稳定性比较好,但是进程多了消耗的内存会比较大.
主进程在创建了StartServers个子进程后,为了满足MinSpareServer的设置需求,会先创建一个进程,等待一秒,创建二个进程,再等待一秒,创建四个进程....以几何数增加创建的进程,最多达到每秒创建32个,直到满足MinSpareServer的设置(可以看到以下的MinSpareServer为5),这就是预派生(Prefork)的由来,这样不必等到有请求到来时才花时间创建新的进程,提高了系统响应速度以增加性能.
MaxSpareServers是最大空闲进程数,如果你的最大空闲进程数超过了这个数,Apache会自动kill掉多余的进程,如果这个值设置的比MinSpareServer小,Apache会自动调整该值为MinSpareServer+1.
ServerLimit:当前服务器上最多有多少个活动的进程数
Maxclient:并发请求的最大数,这个要小于等于ServerLimit,这个是对Apache性能影响很大的一个参数,理论上来说这个值越大,性能就越好.
MaxRequestsPerChild:每个子进程在处理MaxRequestsPerChild个请求后销毁
3.worker
如果有这个模块就启用
StartServers 4 启动的子进程数
MaxClients 300 并发请求最大数
MinSpareThreads 25 最小空闲线程数
MaxSpareThreads 75 最大空闲线程数
ThreadsPerChild 25 每个子进程可生成的线程数
MaxRequestsPerChild0 每个子进程可服务的最大请求数,0表示不限制
root 253481.00.4 1865604152 18:32 0:00 /usr/sbin/httpd.worker 主进程(控制进程)
apache 253522.00.5 5963565372 18:32 0:00 /usr/sbin/httpd.worker 子进程
apache 253532.10.5 5308205368 18:32 0:00 /usr/sbin/httpd.worker 子进程
apache 253691.50.5 5308205372 18:32 0:00 /usr/sbin/httpd.worker 子进程 worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,每个线程处理一个请求,线程是共享内存空间的,所以一个线程崩溃会导致在这个进程下的所有线程都崩溃,所以他的稳定性没有Prefork好,但是内存使用率比Prefork低。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads和MaxSpareThreads的最大缺省值分别是25和75。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。
ThreadsPerChild是worker 中影响性能最重要的一个指标,Worker模式下所能同时处理的请求总数是由StartServers总数乘以ThreadsPerChild的值决定的,应该大于等于MaxClients,这里系统缺省值不知道为什么设置成这样,待我去问问????
累了..休息休息....
页:
[1]