1.PMP
MPM(Multi -Processing Modules,多路处理模块)是Apache2.x中影响性能的最核心特性。
是Apache 2.x才支持的一个可插入的并发模型,在编译的时候,我们只可以选择一个并发模型。
Unix/Linux支持三种MPM,Prefork,worker,event
2.Prefork:
# prefork MPM <IfModule prefork.c> 判断是否有prefork.c这个模块,有就生效,否则无效 StartServers 8 默认启动的工作进程数 MinSpareServers 5 最少空闲进程数 MaxSpareServers 20 最大空闲进程数 ServerLimit 256 最大活动进程数 MaxClients 256 最多允许发起的请求连接数 MaxRequestsPerChild 4000 每个子进程在生命周期能服务的最多请求数 </IfModule>
root 1898 0.0 0.3 186356 17:23 0:00 /usr/sbin/httpd :这是主进程 apache 1901 0.0 0.2 186488 17:23 0:00 /usr/sbin/httpd :这些和以下的都是子进程 apache 1902 0.0 0.2 186488 17:23 0:00 /usr/sbin/httpd apache 1903 0.0 0.2 186488 17:23 0:00 /usr/sbin/httpd apache 1904 0.0 0.2 186488 17:23 0:00 /usr/sbin/httpd apache 1905 0.0 0.2 186488 17:23 0:00 /usr/sbin/httpd apache 1906 0.0 0.2 186488 17:23 0:00 /usr/sbin/httpd apache 1907 0.0 0.2 186488 17:23 0:00 /usr/sbin/httpd apache 1908 0.0 0.2 186488 17: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
<IfModule worker.c> 如果有这个模块就启用 StartServers 4 启动的子进程数 MaxClients 300 并发请求最大数 MinSpareThreads 25 最小空闲线程数 MaxSpareThreads 75 最大空闲线程数 ThreadsPerChild 25 每个子进程可生成的线程数 MaxRequestsPerChild 0 每个子进程可服务的最大请求数,0表示不限制 </IfModule>
root 25348 1.0 0.4 186560 4152 18:32 0:00 /usr/sbin/httpd.worker 主进程(控制进程) apache 25352 2.0 0.5 596356 5372 18:32 0:00 /usr/sbin/httpd.worker 子进程 apache 25353 2.1 0.5 530820 5368 18:32 0:00 /usr/sbin/httpd.worker 子进程 apache 25369 1.5 0.5 530820 5372 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,这里系统缺省值不知道为什么设置成这样,待我去问问????
累了..休息休息....