【问题标题】:web server running inside a docker container running inside an EC2 instance responses very slowly在 EC2 实例中运行的 docker 容器中运行的 Web 服务器响应非常缓慢
【发布时间】: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

到目前为止我是如何调试的

  1. 当从 EC2 实例中 (url = ' http:// localhost:xxxx/api ') 向 docker 容器中运行的 Web 服务器发送请求时,它仍然很慢.所以应该和外部发送请求无关。

  2. 直接在 EC2 中运行另一个 Web 服务器(不在 docker 容器中),它 不是 。它的响应速度非常快。

  3. 我在 EC2 中在另一个 docker 容器中运行另一个 Web 服务器它也很慢!

  4. 当我将请求从 docker 容器内发送到在其中运行的 Web 服务器(在其本地主机上)时,它也很慢

  5. 我使用相同的命令在我的 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


【解决方案1】:

这听起来像是一个名称解析问题。 要对此进行调试,您可以执行不同的操作。

  • 你可以先在docker容器内用nc -l -p 8000启动一个简单的tcp服务器(启动-p 8000:8000),然后在主机上启动:nc 127.0.0.1 8000,输入一些字符,看看TCP是否通信工作,它们应该出现在容器中。

  • 接下来,您可以像以前一样使用“localhost”而不是127.0.0.1

  • 1234563 ,或者可能更容易解决)。

您还可以查看容器内生成的/etc/hosts/etc/resolv.conf。也许它们在容器的网络上下文中没有意义。

此外,您可以精确测量您的请求所需的时间,如果它们接近精确秒,这听起来更像是 DNS 超时(如果是 5.003、10.200、20.030 秒,则就像 X 秒超时,加上响应所需的实时时间)。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多