Apache mod_status 输出是否提供了调整 Apache prefork 配置的任何见解?
例如,使用 Apache 的 mod_status,我发现
- 我的服务器平均每秒收到 3 个请求,范围是每秒 2-10 个请求,最高峰时达到每秒 28 个请求。
- 我的服务器目前正在处理平均7个请求,范围是1-86。
- 我的服务器平均有10个空闲工人,范围是0-99。
这是否能让我了解我的 Apache prefork 设置应该是什么 - 特别是 MinSpareServers、MaxSpareServers、MaxClients 和 MaxRequestsPerChild?或者这些数据不相关?
答案1
您需要确保将 MaxClients 设置为高于典型峰值的某个值(听起来您的情况是 10,但您曾看到过一次高达 86 的爆发,因此也许设置为 150 以留出一些喘息空间,以防出现更大的爆发)。这样,如果发生这种情况,您就不会耗尽连接,也不会让用户感到速度变慢。确保您的服务器上有足够的 RAM 来支持您设置的任何 MaxClients 值(满载下所需的 RAM = 每个 Apache 进程使用的 RAM 乘以 MaxClients)。
如果您不介意占用 RAM,您可以告诉 Apache 保持更多服务器运行,这样当有更多请求时就不需要分叉(创建),方法是将 MinSpareServers 增加到等于您的典型峰值(或接近该峰值)的数字。此外,如果您不介意占用 RAM,您可以将 MaxSpareServers 设置为等于 MaxClients,然后让 Apache 决定是否保留这些额外的备用服务器是个好主意。保留它们的副作用是性能提升。需要注意的是,即使您认为不需要 RAM,操作系统也会将未使用的 RAM 用于通过执行缓存等操作来提高性能,因此这是占用 RAM 时需要考虑的一件事。
MaxRequestsPerChild 并不是为了提高性能,而是为了防止意外内存泄漏等问题(请参阅http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchild)。