在持久的HTTP连接中,除了第一个请求外,Apache不处理其他请求

时间:2019-01-21 14:52:39

标签: apache http docker persistent-connection

有关我的设置的一些背景信息

我有一个在端口80上运行apache(Apache / 2.4.25(Debian))的Docker容器。可以直接从主机或其他Docker容器访问该容器的端口80。

症状

在没有docker安装程序的情况下,我无法正确隔离问题,也没有机器尝试重现该问题,因此我没有一个简单的示例来重现该问题。我可以提供任何可能有用的信息。现在,我只解释我的观察结果。

  • 如果我一次(从我的主机或另一个Docker容器)连接到引擎的apache,它将按预期工作。
  • 如果我等待5秒钟以上并再次连接,它仍然可以按预期工作。
  • 如果我不等待并尝试重新连接,则apache将永久保留该请求。

在第一个连接产生后立即运行netstat -pantu

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
...
tcp        0      0 172.27.0.9:80           172.27.0.1:36428        ESTABLISHED -
...

然后,如果我在发送另一个请求之前不等待ESTABLISHED状态进入CLOSE_WAIT,它将变成

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
...
tcp      742      0 172.27.0.9:80           172.27.0.1:36428        ESTABLISHED -
...

,并永远保持这种状态。请注意Recv-Q停留在742,这意味着如果我正确理解apache甚至没有读取请求的内容。

它如何发生

该设置通常可以正常运行。某种东西“触发”了以上问题,并使其持久连接不再起作用,直到我重新启动Docker容器。我触发它的方式有时是通过运行一个脚本,该脚本从另一个docker容器向数百个(同步)请求发送到apache的容器。

在运行此脚本之前,我可以在短时间内将多个请求发送到apache,而不会出现问题。运行脚本后,我经常处于一种状态,直到重新启动apache容器之前,连续的请求始终保持有效。

我应该怎么做才能调查这个问题?

0 个答案:

没有答案