Apache的调优备忘录
个人对Apache性能调优的备忘录。
如果有错误,请纠正!
预派生
前提 tí) – Premise.
在Apache中,请求由Apache的子服务器进程处理。
为了避免fork的重负,最好设定子服务器进程在动态生成和终止时不产生fork操作。
调整策略
无论负荷高低,始终保持一定数量的进程运行状态。
预派生的操作
MaxClients是一个绝对值。
子进程数不会超过这个值。
当Apache服务器的负载逐渐增加时
-
- 子プロセスを生成していく
-
- アイドル状態の子プロセスはMinSpareServers以上になるよう維持
-
- MaxClients以上の子プロセスは生成しない
- MinSpareServersよりMaxClientsが強い
当负载变得较低时
-
- プロセスがアイドル状態になっていく
- アイドル状態の子プロセスがMaxSpareServers以下になるよう殺す
如果负荷持续较低的状态
- 子プロセスをMinSpareServersになるまで殺す
结论可以是:
如果将MaxClients = MinSpareServers = MaxSpareServers = N,则
-
- 低負荷状態ではMinSpareServers=N個のアイドルプロセスが確保される
-
- 高負荷状態では最大MaxClients=N個のプロセスしか作成されない
- 応答しているプロセスが0でもMaxSpareServers=N個のアイドル状態は許されている
换句话说,不会出现分叉。
但是,(服务器的内存)/(单个子进程所使用的最大内存)
将成为上限值。
需要监控和了解子进程所使用的内存量。
以下是以N为500的配置样本。
StartServers 500
MaxClients 500
MinSpareServers 500
MaxSpareServers 500
ServerLimit 500
MaxRequestsPerChild 0
性能参数
启动服务器
生成的子服务器进程数在启动时。默认值为5。
由于子服务器进程数根据负载动态变化,所以意义不太大。
最好将其设置为始终想要运行的数量。
http://httpd.apache.org/docs/2.2/zh_cn/mod/mpm_common.html#startservers
设置示例
StartServers 5
最小空闲服务器数量
子服务器进程处于空闲状态的最小(期望)数量。默认值为5。
换句话说,要一直保持这么多的进程处于空闲状态。
如果没有足够的空闲子服务器进程,将以最高每秒生成一个子服务器进程的速度产生新的子服务器进程。
增大这个值似乎不是一个好的想法。
请将以下内容用中文重新表述,只需要一个选项:
http://httpd.apache.org/docs/2.2/ja/mod/prefork.html#minspareservers
设定样本
MinSpareServers 5
最大空闲服务器数
子服务器进程的最大(期望)数量处于闲置状态。默认值为10。
这意味着当闲置子服务器进程的数量超过此值时,请终止小型服务器进程。
增大这个值似乎是一个不好的想法。
设置示例
MaxSpareServers 19
最大客户量
可以同时响应的请求数量。默认为256。
这意味着可以启动的子服务器进程的最大数量。
请参考以下链接获取关于最大客户端数量(MaxClients)的信息:http://httpd.apache.org/docs/2.2/zh_cn/mod/mpm_common.html#maxclients
設定範本
MaxClients 256
服务器限制
MaxClients的可指定数上限。
换句话说,只要超过MaxClients的值即可。
如果大小超过了一定限度,会分配额外的未使用共享内存,导致不稳定。
只有当MaxClients大于默认值(256)时,才需要设置适当的值。
请参考以下链接获取关于serverlimit的更多信息:
http://httpd.apache.org/docs/2.2/ja/mod/mpm_common.html#serverlimit
设置示例
ServerLimit 256
最大请求数每个子进程
每个子服务器进程能处理的请求总数。默认值为10000。
换句话说,当子服务器进程启动后,只能处理这么多的请求,然后就会终止。
设为0即为无限制。
如有发生内存泄漏等情况,尽管会继续发生内存泄漏,但如果将其设为0,fork的次数将大幅减少。
请点击此链接查看有关“maxrequestsperchild”的详细信息:http://httpd.apache.org/docs/2.0/zh/mod/mod_mpm_common.html#maxrequestsperchild
设置示例
MaxRequestsPerChild 10000