Apache配置文件中有非常多的参数,绝大多数Apache都是运行于mpm_prefork模式下,而对prefork参数的调试至关重要。prefork模式对每个不同的请求使用不同的进程,因此能够避免非常多的安全问题。它具有强大的自我调节能力,能够比较智能的适应不同压力的访问。

调整性能参数并非纸上谈兵,需要在调整的每一步都对服务器进行负载压力测试,以确保在服务器稳定的基础下实现最高的性能。

参数解释

Apache的MPM配置文件主要有如下几段:

1 <IfModule mpm_prefork_module>
2 StartServers 10
3 MinSpareServers 5
4 MaxSpareServers 15
5 MaxClients 200
6 MaxRequestsPerChild 5000
7 </IfModule>

其中MaxClients、MinSpareServers与MaxSpareServers是关键。

MaxClients决定了Apache最多创建多少个子进程用来处理请求。进一步举例解释,如果这个参数设置为200(如图),则当Apache主进程收到大量请求时,会创建最多200个进程。而这200个进程用于处理这些请求。因此,无论有多少个请求,也只会有200个进程并行处理。

MaxSpareServers顾名思义是“最多空闲进程”,注意“空闲”二字。接上一个例子,当这200个进程处理完了所有的请求后,这些进程便都“空闲”了。此时Apache便会杀死一些进程以释放资源。那么,如上图设置,Apache会保留最多15个空闲的进程;

MinSpareServers是“最少空闲进程”。当Apache启动时,如果空闲的进程少于5个,则会以一定频率创建新的进程,直到满足这个数值(5)。这样设计的目的是为了让Apache更迅速的应付潜在的访问高峰。

StartServers表示Apache在启动的时候创建的进程数量。如果访问压力很大,那么进程数会逐步增加,直到达到MaxClients设置的数量。

MaxRequestPerChild表示每个进程处理的最大请求数。当任何一个子进程处理的请求数达到MaxRequestPerChild后,便会自杀。如果MaxRequestPerChild设置为0,表示不限(即永远不自杀)。这种机制的作用是防止潜在的内存泄露。如果Apache的某个模块,或者某段php脚本可能导致内存泄露,而处理进程却又永远不退出,则很可能造成服务器内存剧增最终崩溃。当开启这个机制后,无论是否存在内存泄露,都会让进程在处理一定数量的请求后退出,同时释放所有内存。

调优约束条件

MaxClients参数的最佳值在很大程度上取决于内存大小。此参数调优的目标即当Apache处在最多子进程数状态时,服务器不会使用swap。如果此数值的设置过大,则Apache在访问高峰期会创建过多的子进程,导致Linux使用swap来作为内存。而swap的效率非常低,并且会导致磁盘压力增大,形成恶性循环。

如果希望Apache能在访问非高峰期过后能够迅速的释放资源,则MaxSpareServers应该设置得略低,让Apache迅速杀死过多的子进程;

如果希望Apache能够迅速应对突如其来的访问高峰,则应将MinSpareServers设置高一点,让Apache创建较多的空闲(备用)进程。

而MaxRequestPerChild对性能的影响则没有那么明显。如果MaxRequestPerChild设置偏小,则Apache可能会在访问高峰期时,把大量的CPU消耗在创建/杀死进程上,造成不必要的CPU损耗。

Prefork机制

prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。

这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。

如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。

标签:
本文连接地址: http://www.fresker.com/old2/archives/507 (转载注明出处)

回复

目前暂无评论

Sorry, 评论已关闭.