![当我增加 MinSpareServers 时,CGi / FastCGI 是否会改善?](https://linux22.com/image/612628/%E5%BD%93%E6%88%91%E5%A2%9E%E5%8A%A0%20MinSpareServers%20%E6%97%B6%EF%BC%8CCGi%20%2F%20FastCGI%20%E6%98%AF%E5%90%A6%E4%BC%9A%E6%94%B9%E5%96%84%EF%BC%9F.png)
在 Apache/cPanel 中,我可以设置 MinSpareServers 和 MaxSpareServers 的数量。但是空闲进程的用户是 nobody。
我正在运行 SuPHP,而 PHP 在 CGI 下运行。因此,如果我增加繁忙站点的最小/最大备用服务器数量,这会影响 CGI/SuPHP 吗?还是它仅有助于提高无人环境下 DSO 的速度?
(我使用 Nginx 作为代理来处理静态文件)
如果我可以在 Google 上搜索这个问题,我就不需要在这里问了。
答案1
据我所知,“备用”服务器的数量,顾名思义,就是 apache 服务器为服务未来请求而提前准备的工作进程的数量。(我在这里假设一个“MPM-prefork”配置)
总体来说,很难说它是否会加速服务器速度或使服务器变得过于拥挤,因为这取决于许多因素:服务器所进行的活动类型、使用模式、连接的数量和持续时间、处理每个请求所需的内存大小、保持活动设置等...
作为一般规则,认为有太多的备用服务器是一种浪费,因为您将让您的 Apache 使用内存来准备好一些进程,以备不时之需,即使不需要它们,也可能会减少正在运行的进程可用的内存。
另一方面,备用服务器太少会迫使客户端等待 apache 进程创建一个新的服务器来处理请求,使其启动并运行,然后将连接传递给它,以便它可以继续工作。
底线:您可能需要调整比您提到的两个更多的参数,并且您必须通过确定哪种设置最适合您的情况来平衡它们。
顺便提一下,因为您可能会发现它很有用,请查看“服务器状态”页面(您也可以使用命令行中的 apachectl 查看它,查看手册页):它将向您显示有关正在运行的进程状态的很多详细信息,因此您可以判断服务请求的插槽是否太多或太少。
还要检查您的使用模式是否能从保持活动状态中受益,以便来自同一客户端的短时间请求和接近时间的请求由同一工作进程处理,而无需在每个请求上建立新连接。无论如何,不要过分强调保持活动状态的持续时间,否则工作进程将不得不等待很长时间才能接受新客户端,最终您将用尽空闲的插槽来处理新请求。
正如您所见,有很多调整的空间,但原因很简单:每个情况都不同,所以您必须知道要转动哪些旋钮,然后尝试一下。
高血压
[编辑] 这是链接其中描述了 Min/MaxSpareServers 指令在Apache2.2官方文档中。
MaxSpareServers 指令
MaxSpareServers 指令设置所需的最大空闲子服务器进程数。空闲进程是指未处理请求的进程。如果空闲进程数超过 MaxSpareServers,则父进程将终止多余的进程。只有在非常繁忙的站点上才需要调整此参数。将此参数设置为较大的数字几乎总是一个坏主意。如果您尝试将值设置为等于或低于 MinSpareServers,Apache 会自动将其调整为 MinSpareServers + 1。
MinSpareServers 指令
MinSpareServers 指令设置所需的最小空闲子服务器进程数。空闲进程是指未处理请求的进程。如果空闲进程数少于 MinSpareServers,则父进程将以每秒 1 个的最大速率创建新的子进程。只有在非常繁忙的站点上才需要调整此参数。将此参数设置为较大的数字几乎总是一个坏主意。
在同一页面上,对机制有很好的描述:
单个控制进程负责启动子进程,这些子进程监听连接并在连接到达时提供服务。Apache 始终尝试维护多个备用或空闲的服务器进程,这些进程随时准备为传入请求提供服务。这样,客户端无需等待分叉出新的子进程即可为其请求提供服务。
StartServers、MinSpareServers、MaxSpareServers 和 MaxClients 控制父进程如何创建子进程来处理请求。一般来说,Apache 具有很强的自我调节能力,因此大多数站点不需要调整这些指令的默认值。需要处理超过 256 个同时请求的站点可能需要增加 MaxClients,而内存有限的站点可能需要减少 MaxClients,以防止服务器崩溃(将内存交换到磁盘并交换回来)。有关调整进程创建的更多信息,请参阅性能提示文档。