【问题标题】:How many connections can a child process handle?一个子进程可以处理多少个连接?
【发布时间】:2017-06-05 17:09:04
【问题描述】:

根据官方 apache.org 网站:

MaxConnectionsPerChild 指令设置单个子服务器进程在终止前将处理的连接数限制。

我会很感激一些澄清:

Q1:由于这个设置是在prefork的上下文中,上面提到的连接数是指连接请求(SYN_SENT)还是接受/建立的连接?什么情况下过期比较好?

Q2:与只处理监听端口 80 的父进程不同,预分叉的子进程同时处理监听和建立的连接。它一次可以处理的并发传入连接请求(SYN_SENT)的限制受到 MaxRequestWorkers 的 apache 指令的限制,而 ThreadsPerChild 限制了并发 ESTABLISHED 套接字的数量。这是正确的吗?

Q3:如果孩子正在监听 80 端口,那么父母会做什么?它会一直听吗?

谢谢

【问题讨论】:

  • 我了解 ThreadsPerChild 在 prefork mpm 下没有使用

标签: linux apache process connection listen


【解决方案1】:

取决于使用的 mpm。 对于 prefork mpm,子进程处理一个连接(因此 serverlimit 将等于 MaxClients(从 apache 2.4 开始,现在称为 MaxRequestWorkers)。

Worker 和 event mpms 使用一个子进程可以处理多个连接的线程。

Q1:没有。
MaxConnectionsPerChild 现在称为 MaxRequestsPerChild。 根据 apache.org 网站,MaxRequestsPerChild 设置每个子服务器进程在子进程死亡之前服务的请求总数。 设置 MaxRequestsPerChild 的主要原因是避免长期进程引起的内存泄漏。 prefork MPM 的默认 MaxRequestsPerChild 为 1000,worker MPM 为 0。

Q2:这个概念本身是正确的。 虽然 MaxRequestWorkers 和 ThreadsPerChild 不是 prefork mpm 指令。

Q3:Parent 会根据需要继续监听 prefork 额外的子节点,并将监听任务委托给他们,以便他们处理传入的连接请求。

克服 prefork 1 child/1 连接限制的一个好方法是启用 KeepAlive 及其子指令。这将允许客户端/浏览器同时发出许多 GET 请求,以便他们可以通过 1 个 tcp 连接获取所有页面元素。这减少了延迟,因为它大大减少了那些昂贵的 tcp 握手。现在大多数浏览器都支持keep-Alive功能。

确保使用 KeepAliveTimeout 设置超时,这样那些未关闭的浏览器选项卡就不会占用您的连接槽。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2019-01-30
    • 2010-12-07
    • 2013-09-15
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多