有关我的设置的一些背景信息
我有一个在端口80上运行apache(Apache / 2.4.25(Debian))的Docker容器。可以直接从主机或其他Docker容器访问该容器的端口80。
症状
在没有docker安装程序的情况下,我无法正确隔离问题,也没有机器尝试重现该问题,因此我没有一个简单的示例来重现该问题。我可以提供任何可能有用的信息。现在,我只解释我的观察结果。
在第一个连接产生后立即运行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容器之前,连续的请求始终保持有效。
我应该怎么做才能调查这个问题?