performance - 在 EC2 实例内运行的 docker 容器内运行的 Web 服务器响应非常缓慢

标签 performance docker amazon-ec2 docker-container response-time

我有一个 Web 服务器在 AWS EC2 Ubuntu 实例中的 docker 容器内运行。当我向 Web 服务器发送请求时,我得到的响应非常缓慢(大多数情况下为 20 秒以上,尽管响应时间有所不同)。 虽然它不会超时 . Web 服务器是一个非常轻量级的服务器。它只是为了测试,所以几乎什么都不做。

docker version 17.03.0-ce

docker-compose version 1.12.0-rc1

到目前为止我是如何调试的
  • 向在 docker 容器中运行的 Web 服务器发送请求时EC2 实例内 (url = ' http://localhost:xxxx/api ') 它仍然很慢。所以不应该与从外部发送请求有关。
  • 我运行另一个网络服务器 直接在EC2里面 (不在 docker 容器中),它 不是 .它的 react 非常快。
  • 我运行另一个网络服务器 在另一个码头容器内在 EC2 中,和 它也很慢!
  • 当我从 发送请求时docker 容器内 到在其中运行的 Web 服务器(在其本地主机上),也很慢 !
  • 我使用相同的命令运行容器 在我的 Mac 电脑上 并得到响应 不慢!

  • 这是容器统计信息之一:
    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
    

    我知道可能很难知道这个问题。我的问题是调试原因并最终找到解决方案的步骤。如果您能详细解释您的方法,我将不胜感激。

    最佳答案

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

  • 你可以先用 nc -l -p 8000 启动一个简单的 tcp 服务器在 docker 容器内(启动 -p 8000:8000),并在主机上启动:nc 127.0.0.1 8000 , 键入一些字符,查看 TCP 通信是否有效,它们应该出现在容器中。
  • 接下来,您可以执行与之前相同的操作,但使用“localhost”而不是 127.0.0.1
  • 在此之后,您可以执行与之前相同的 HTTP 请求,但使用 127.0.0.1而不是 localhost (这会将请求的 Host: header 设置为相同的值,网络服务器可能不会检查该值,或者可能更容易解决)。

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

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

    关于performance - 在 EC2 实例内运行的 docker 容器内运行的 Web 服务器响应非常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986912/

    相关文章:

    matlab - 如何给出向量中每个元素的顺序

    Dockerized nginx 镜像获取完全不同应用程序的配置文件

    docker - 我如何在 docker 构建过程中传递参数或绕过它?

    amazon-web-services - 在没有公共(public) IP 的情况下设置 Amazon Elastic Beanstalk 应用程序

    linux - LS 命令未在 Amazon EC2 中列出文件

    c# - 什么时候可以使用 ClearAllPools 方法?

    python - 使用递归函数将嵌套列表转换为集合

    c++ - 图像矩的快速计算

    docker - Mesos Slave无法创建容器器

    amazon-web-services - AWS更新后重新部署Docker