我知道 apache 中的 prefork 模块创建了一个主进程和几个子进程来处理连接,我的问题是:
每个 prefork 子进程是否处理一个联系或处理一个要求每次?如果它处理一个连接,是否意味着每个新连接都需要在队列中等待由其中一个空闲子进程处理?这对保持活动连接意味着什么?
我对使用线程的 worker mpm 模块也有同样的疑问?
答案1
每个 prefork 子进程每次处理一个连接还是处理一个请求?
每个子线程/线程处理一个连接(TCP 连接)。
一旦连接关闭,子进程将等待另一个连接。在一个连接上可以发送 0 个、1 个或多个请求(HTTP 请求)。
如果客户端没有发送请求,则根据您的配置,日志中可能会出现 HTTP 408 超时。
和活着启用后,每个连接可以有多个 HTTP 请求,因为一旦第一个请求被处理,连接就不会关闭。
在没有 KeepAlive 的情况下,有一个连接和一个请求,这可能是问题的原因。
每个新连接都需要在队列中等待由其中一个空闲子进程处理?
是的,这就是为什么您要配置 Apache 以拥有一些空闲的服务器/线程,这样新的连接就不需要等待新的子进程/线程的创建。如果没有足够的子进程,则将根据需要并根据配置中的限制创建新的子进程。
到目前为止,我对这个过程的理解就是这样的。