我有一个 Web 服务器在 AWS EC2 Ubuntu 实例中的 docker 容器内运行。当我向 Web 服务器发送请求时,我得到的响应非常缓慢(大多数情况下为 20 秒以上,尽管响应时间有所不同)。 虽然它不会超时 . Web 服务器是一个非常轻量级的服务器。它只是为了测试,所以几乎什么都不做。
docker version 17.03.0-ce
docker-compose version 1.12.0-rc1
到目前为止我是如何调试的
这是容器统计信息之一:
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 通信是否有效,它们应该出现在容器中。 127.0.0.1
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/