首页 > 解决方案 > Apache 线程在查询后保持状态读取

问题描述

我的配置是 aws elb 后面的 apache 和 tomcat。Apache 配置为没有保持活动状态,并且由于每个查询都非常占用 CPU 资源,因此将最大客户端设置为较低的数字。我将使用查询对机器进行负载测试。然后可用请求的数量变为零,这可以curl -s localhost/server-status?auto从不立即响应中看出。当我停止负载测试时,我可以看到记分板curl -s localhost/server-status?auto仍然充满了 R,即使从 tomcat 日志中很明显没有发生任何事情。有谁知道可能有什么可能的原因?

标签: apacheamazon-ec2aws-elb

解决方案


如果您的 apache 在状态中显示“R”,则表示存在从 ELB 到 apache 的开放 TCP 连接(只是一个开放的 TCP 连接,尚未发送数据)。

没有关于此主题的官方完整文档(如何优化预打开连接的数量),但亚马逊文档状态(在此页面:https ://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/ how-elastic-load-balancing-works.html):

Classic Load Balancer 使用预先打开的连接,但 Application Load Balancer 不使用。

所以,答案是:它是来自亚马逊的优化(打开 TCP 连接需要一点成本)。


推荐阅读