子进程可以处理多少个连接?

时间:2017-01-20 16:31:19

标签: linux apache process connection listen

根据官方apache.org网站:

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

我很欣赏一些澄清:

Q1:由于此设置在prefork的上下文中,上面提到的连接数是否指的是连接请求(SYN_SENT)或已接受/已建立的连接?在什么情况下,它会过期吗?

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

问题3:如果孩子们在80号港口听,那么父母会做什么呢?它一直在听吗?

谢谢

1 个答案:

答案 0 :(得分:0)

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

工作者和事件mpms使用线程,其中一个孩子可以处理许多连接。

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

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

问题3:家长会根据需要继续收听prefork额外的孩子,并委托他们收听,以便他们为传入的连接请求提供服务。

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

确保使用KeepAliveTimeout强制超时,以便那些未关闭的浏览器标签不会占用你的连接插槽。