prefork 下StartServers、MinSpareServers、MaxSpareServers等选项的关系

首先,prefork 控制进程在建立“StartServers”个子进程后,当未满足MinSpareServers设置的进程数时,在第一个单位时间,继续创建1个子进程,再等待一个单位时间,继续创建两个……如此按指数级增加创建的进程数,最多达到每秒32个,当达到每秒32个子进程的时候就不会再指数增加了。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。


现在来验证上面一段话,首先验证起始是2的0次幂个进程。

配置:


StartServers 2
MinSpareServers 3
MaxSpareServers 5
MaxRequestWorkers 250
MaxConnectionsPerChild 0


重启apache后,查看进程数:

[root@localhost conf.modules.d]# ps aux|grep httpd |grep -v grep
root       6878  0.2  0.4 307700 11784 ?        Ss   14:56   0:00 /usr/sbin/httpd -DFOREGROUND
apache     6879  0.0  0.2 322048  6512 ?        S    14:56   0:00 /usr/sbin/httpd -DFOREGROUND
apache     6880  0.0  0.2 322048  6512 ?        S    14:56   0:00 /usr/sbin/httpd -DFOREGROUND
apache     6955  0.0  0.2 322048  6512 ?        S    14:56   0:00 /usr/sbin/httpd -DFOREGROUND

三个子进程,得证。


验证最大只能到单位时间开启32个子进程:

配置:


StartServers 2
MinSpareServers 90
MaxSpareServers 120
MaxRequestWorkers 250
MaxConnectionsPerChild 0


这个配置的意思是,起始两个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 -l
98
出去root进程的话刚好97个,最高32个得证。

你可能感兴趣的:(apache)