我有一个在 Linux 机器上运行的 apache prefork 模块 http 服务器。该机器有 8GB RAM。我的 /etc/httpd/conf/httpd.conf 中有以下内容:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 512
MaxClients 512
MaxRequestsPerChild 4000
</IfModule>
问题是,256 个子进程之后不再有子进程被分叉,请求被排队。我可以看到在重负载下子进程的数量停留在 256 个。
一个httpd进程的平均内存大约为3.69MB。
答案1
除了将MaxClients
和ServerLimit
设置增加到 512 之外,您还需要将其提高 MaxRequestWorkers
到512
。
引自精美手册:
...需要同时处理超过 256 个请求的网站可能需要增加
MaxRequestWorkers
...
再进一步:
MaxRequestWorkers 指令
描述:同时处理的最大连接数
句法:MaxRequestWorkers number
该指令设置了同时处理 的
MaxRequestWorkers
请求数限制。任何超过限制的连接尝试MaxRequestWorkers
通常都会排队
...
非线程服务器(即 prefork),MaxRequestWorkers
表示将启动来处理请求的最大子进程数。默认值为 256;为了增加它,你还必须提高ServerLimit
。