牛牛逼逼叉叉
菜单

Apache MPM Prefork模式参数调优方法

2016年07月19日,分类《系统运维》,作者:
博客捐助

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

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

参数解释

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

<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 5
MaxSpareServers 15
MaxClients 200
MaxRequestsPerChild 5000
</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”个请求后将自动销毁。

这些参数实际VPS中设置的建议,请参考《VPS中的Apache性能调优建议



发表评论

电子邮件地址不会被公开。 必填项已用*标注

【上一篇】

VPS中的Apache参数性能调优建议

【下一篇】

使用ab命令对Apache服务器进行负载压力测试