代码之家  ›  专栏  ›  技术社区  ›  avernet

Apache:如何在Apache/mod\u代理中设置并发转发请求数的上限?

  •  1
  • avernet  · 技术社区  · 14 年前

    注意,这是您可以在Tomcat级别使用 maxThreads 属性,但我更喜欢在Apache级别处理这个问题。

    PS 2:我看到Apache有一个 MaxClients 配置,这似乎是做什么,我正在寻找。但是我不清楚如何让MaxClient-per-server-mod\u代理转发到,而不是MaxClient-per-Apache。例如,如果Apache将请求转发到一个由4个Tomcat机器组成的集群,我希望Apache将转发到任何给定Tomcat的并发请求数限制为N(比如,N=4)。

    1 回复  |  直到 14 年前
        1
  •  1
  •   avernet    14 年前

    解决方案是通过在代理中添加参数来实现的 ProxyPass 指令。你想设置的可能是 . 但是,这会立即抛出一个错误,当您点击 .

    如果你真的想排队,你必须同时使用mod\u proxy\u balancer。例如,允许最多4个连接:

    ProxyPass / balancer://appservers/ stickysession=JSESSIONID|jsessionid nofailover=On
    <Proxy balancer://appservers>
        BalancerMember ajp://192.168.0.100:8009 max=4
        BalancerMember ajp://192.168.0.101:8009 max=4
        BalancerMember ajp://192.168.0.102:8009 max=4
        BalancerMember ajp://192.168.0.103:8009 max=4
    </Proxy> 
    

    不幸的是,在Apache中 max 是每个进程。因此,只有当Apache只有一个进程并且使用线程而不是进程来处理多个连接时,才能有效地限制到后端服务器的连接数,这取决于什么 MPM 正在由Apache使用:

    • ,你应该都很好,而且很可能不必担心这个,因为 winnt MPM 使用一个进程,该进程反过来创建线程来处理请求。
    • 在UNIX上 ,如果您使用的是操作系统附带的Apache,不幸的是,您很有可能 prefork MPM Apache,它为每个请求创建一个进程,max参数无法使用:

      1. 要检查您的MPM,请运行 apachectl -l .
      2. worker.c event.c ,那么您就差不多很好了:您现在只需要确保Apache只创建一个进程。为此,设置 ThreadsPerChild MaxClients 相同的值,即Apache能够处理的并发连接总数。同时设置 ServerLimit 到1。
      3. 在列表中,如果你看到 prefork.c