【发布时间】:2017-08-16 15:34:19
【问题描述】:
我在 AWS EC2 Ubuntu 实例的 docker 容器中运行了一个 Web 服务器。当我向 Web 服务器发送请求时,我得到的响应非常缓慢(大多数时候是 20 多秒,尽管响应时间会有所不同)。 它不会超时。 Web 服务器是一个非常轻量级的。只是为了测试,所以几乎什么都不做。
docker version 17.03.0-ce
docker-compose version 1.12.0-rc1
到目前为止我是如何调试的
当从 EC2 实例中 (url = ' http:// localhost:xxxx/api ') 向 docker 容器中运行的 Web 服务器发送请求时,它仍然很慢.所以应该和外部发送请求无关。
我直接在 EC2 中运行另一个 Web 服务器(不在 docker 容器中),它是 不是 慢。它的响应速度非常快。
我在 EC2 中在另一个 docker 容器中运行另一个 Web 服务器,它也很慢!
当我将请求从 docker 容器内发送到在其中运行的 Web 服务器(在其本地主机上)时,它也很慢 !
我使用相同的命令在我的 mac 计算机上运行容器,并且 get 响应不慢!
这是容器统计数据之一:
CPU %: 0.28%
MEM USAGE / LIMIT: 27.49 MiB / 992.5 MiB
MEM %: 2.77%
NET I/O: 53.7 kB / 30.5 kB
BLOCK I/O: 2.24 MB / 0 B
我知道可能很难知道这个问题。我的问题是调试原因并最终找到解决方案的步骤。如果您能详细解释您的方法,我将不胜感激。
【问题讨论】:
-
首先想到的是 DNS 查找超时。
-
@BMitch 你能解释一下我如何调试吗?什么DNS服务器?请注意,EC2 中的请求很慢,因此对于 localhost 很慢。
-
容器内的 DNS 配置不一定与主机的配置相同,尤其是当主机使用类似环回的 DNS 服务器时(例如 dnsmasq)。如果网络服务器上的某些内容正在执行超时的查找,例如记录连接的主机名,则可能会导致延迟。但这是众多可能性中的一种,如果没有更多细节就很难说。
-
@BMitch 我怎样才能更接近理解/修复它?
-
您好,请给我们 Dockerfile、您的 docker run 命令以及您如何在 ec2 中进行测试。所以我们可以提供帮助
标签: performance docker amazon-ec2 docker-container response-time