2016-07-24 632 views
3

我遇到了Docker容器和主机网络之间网络性能不佳的问题。我在Docker的论坛上问了这个问题,但到目前为止还没有收到答案。主机网络的Docker容器网络性能非常慢

问题

设置:在同一本地网络上的两台Mac;第一个运行MQTT经纪人(mosquitto);第二个运行Mac的Docker。两台C++程序在第二台Mac上运行,并使用Paho MQTT C库通过MQTT代理(第一台Mac)多次交换数据。本机运行:当我原生运行两个C++程序时,网络性能非常好,如预期的那样。这些程序是用XCode 7.3编译的。

Docker运行:当我在Docker中运行任一C++程序或它们两个时,网络性能急剧下降,大约比本机运行慢30倍。 Docker镜像基于ubuntu:latest,并且这些程序是由gcc构建的(Ubuntu 5.4.0-6ubuntu1〜16.04.1)5.4.0 20160609.

我尝试使用主机网络(--network = “主机”在Docker运行),但它没有帮助。我还尝试在第二台Mac上运行MQTT代理(以便代理和容器在同一台主机上运行);问题依然存在。我的工作局域网和家庭网络上都存在这个问题。

理论上,它可能是C++程序在Docker容器中通常很慢。但我怀疑是这样,因为根据我的经验,Docker中C++代码的一般性能与本机环境中的性能差不多。

问题

什么可能是这个问题的原因? Docker中有没有可以解决这个问题的设置?

回答

0

我怀疑容器的内存和CPU的默认分配可能不是您尝试实现的网络性能的最佳分配。

  1. 调查资源的使用标准工具如top,HTOP,strace的等容器内,利用或您可以使用泊坞窗stat命令时,这些实例都在运行高峰 $ docker stats node1 node2 CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O node1 0.07% 796 KB/64 MB 1.21% 788 B/648 B node2 0.07% 2.746 MB/64 MB 4.29% 1.266 KB/648 B
  2. 那么你可能想修改docker run可用的各种资源分配参数。 enter image description here

  3. 编辑:检查另一件事是实际系统接口的MTU和对搬运工接口的设置。使用 --mtu=BYTES设置你的泊坞窗值的MTU以匹配您的系统接口的MTU值
+0

感谢您的回答。我尝试了你的建议。 CPU使用率非常低(0.3%),2Gb限制的内存使用量为4.4Mb,超过35秒的净I/O总计约为500Kb/400Kb。因此,网络I/O速度仅为14Kb和11Kb /秒,在现代计算机和网络上速度异常缓慢。本土跑了不到1秒。任何建议? – Truong

+0

@Truong你可以检查我在编辑中添加的MTU设置吗? –

+0

Docker for Mac上不存在MTU选项:https://docs.docker.com/docker-for-mac/networking/。我想默认情况下MTU将被设置为匹配主机的值(在我的情况下是1500)。 – Truong