gpt4 book ai didi

Apache:如何在 Apache/mod_proxy 中设置并发转发请求数的上限?

转载 作者:行者123 更新时间:2023-11-28 22:23:31 28 4
gpt4 key购买 nike

我有一个相当标准的设置,其中前端 Apache 服务器通过 mod_proxy/AJP 将请求转发到 Tomcat。我如何设置 Apache/mod_proxy 以便它最多只将 N(例如,N=4)个并发请求转发给 Tomcat?不应拒绝进入 Apache 的其他并发请求,而应排队等候稍后发送到 Tomcat。

PS 1:请注意,您可以使用 maxThreads 属性在 Tomcat 级别执行此操作,但我更喜欢在 Apache 级别处理它。

PS 2:我看到 Apache 有一个 MaxClients配置,这似乎正在做我正在寻找的东西。但我不清楚如何让每个服务器 mod_proxy 转发到一个 MaxClient,而不是每个 Apache 的 MaxClient。 IE。如果 Apache 将请求转发到 4 台 Tomcat 机器的集群,我希望 Apache 将转发到任何给定 Tomcat 的并发请求数限制为 N(例如,N=4)。

最佳答案

解决办法是在ProxyPass中加入参数mod_proxy指令。您要设置的可能是最大值。然而,当您达到最大值时,这会立即引发错误并且不会对您的请求进行排队。

如果你真的想排队,你还必须使用 mod_proxy_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 使用:

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

    1. 要检查您拥有的 MPM,请运行 apachectl -l
    2. 在列表中,如果您看到 worker.cevent.c,那么您就差不多好了:您现在只需要确保 Apache 只创建一个过程。为此,将 ThreadsPerChildMaxClients 设置为相同的值,这将是 Apache 能够处理的并发连接总数。同时将 ServerLimit 设置为 1。
    3. 在列表中,如果您看到prefork.c,那么您首先需要将您的Apache 替换为worker 或event MPM Apache。您可以通过自己重新编译 Apache(MPM 不是运行时配置参数)或为您的平台获取现有包来实现。然后,转到第二步。

关于Apache:如何在 Apache/mod_proxy 中设置并发转发请求数的上限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167907/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com