首先,PRefork 控制进程在建立“StartServers”个子进程后,当未满足MinSpareServers设置的进程数时,在第一个单位时间,继续创建1个子进程,再等待一个单位时间,继续创建两个……如此按指数级增加创建的进程数,最多达到每秒32个,当达到每秒32个子进程的时候就不会再指数增加了。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
现在来验证上面一段话,首先验证起始是2的0次幂个进程。
配置:
<IfModule mpm_prefork_module>StartServers 2MinSpareServers 3MaxSpareServers 5MaxRequestWorkers 250MaxConnectionsPerChild 0</IfModule>重启apache后,查看进程数:[root@localhost conf.modules.d]# ps aux|grep httpd |grep -v greproot 6878 0.2 0.4 307700 11784 ? Ss 14:56 0:00 /usr/sbin/httpd -DFOREGROUNDapache 6879 0.0 0.2 322048 6512 ? S 14:56 0:00 /usr/sbin/httpd -DFOREGROUNDapache 6880 0.0 0.2 322048 6512 ? S 14:56 0:00 /usr/sbin/httpd -DFOREGROUNDapache 6955 0.0 0.2 322048 6512 ? S 14:56 0:00 /usr/sbin/httpd -DFOREGROUND三个子进程,得证。验证最大只能到单位时间开启32个子进程:
配置:
<IfModule mpm_prefork_module>StartServers 2MinSpareServers 90MaxSpareServers 120MaxRequestWorkers 250MaxConnectionsPerChild 0</IfModule>这个配置的意思是,起始两个apache子进程,然后2+1+2+4+8+....+32 = 65个子进程,若是下一个时间单位开启64个子进程的话,65+64=129大于120,多余的进程会被kill吊,最后稳定的进程数应该是120个,若仍然是32个的话,65+32=97最后稳定的进程数应该是97个。重启apache后等一段时间查看进程:
[root@localhost conf.modules.d]# ps aux|grep httpd |grep -v grep |wc -l98出去root进程的话刚好97个,最高32个得证。
新闻热点
疑难解答