单个 Apache 工作进程是否只处理 1 个请求或更多请求?

单个 Apache 工作进程是否只处理 1 个请求或更多请求?

当 Apache 服务器并发用户数达到 250 左右时,我遇到了一个问题。只有当空闲工作线程数设置为 0 时,才会出现此问题。

所以我的问题是,单个 Apache 工作程序是否只处理 1 个请求或更多请求?如何将工作程序或最大用户数增加到至少 700 个并发?

我在 Windows 2008 R2 上使用 Apache 2.2,MPM 类型是:mpm_winnt。

答案1

mpm_winnt 在设计上似乎与 mpm_worker 非常接近。mpm_worker 使用多个进程(服务器),每个进程有多个线程来提供连接服务。mpm_winnt 只使用一个进程。

因此,你可以使用以下方法调整并发连接数ThreadLimitThreadsPerChild指令。

在盲目更改这两个之前,请先阅读文档。

答案2

查看 MaxClients - 这是 prefork 和 worker 的常见设置。

http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients

答案3

对于典型的小型服务器配置,预分叉 MPM,你可能需要类似这样的内容:

StartServers 5
MinSpareServers 1
MaxSpareServers 10
ServerLimit 500
MaxClients 500
MaxRequestsPerChild 5000

请注意,这将限制为 500。如果您想要更多,只需增加该值即可。这些值对于一般的小型网站来说是合理的,但如果您的网站不是“通用的”,您确实需要花一些时间并根据您的网站调整这些值。

如果您的规模比这大得多,那么是时候切换到不同的 MPM 了,例如 worker 或 event。不过,这可能需要更改网站的各个方面,具体取决于您使用的技术。

为一个螺纹式 MPM(活动、工作者)和一个通用的小型网站:

StartServers 5
MinSpareThreads 1
MaxSpareThreads 10
MaxClients 1024
ThreadsPerChild 64
MaxRequestsPerChild 50000

MPM WinNT 只有一个进程(子进程),因此您需要将 ThreadsPerChild 增加到合理的值。另一个答案包含指向相关 Apache 手册页的链接。

相关内容