具有主机网络的Docker容器的网络性能非常低

时间:2016-07-24 22:15:40

标签: macos networking docker mqtt paho

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

问题

设置:同一本地网络中的两台Mac;第一个运行MQTT经纪人(mosquitto);第二个运行Docker for Mac。两个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中是否有可以解决此问题的设置?

2 个答案:

答案 0 :(得分:2)

您的问题听起来与Docker for Mac回购中的this open issue非常相似。不幸的是,似乎没有已知的解决方案,但是其中的讨论可能会有用。我目前的personal guess是,该错误存在于专门用于Mac的Docker上的hyperkit虚拟化附近。

就我而言,我奇怪地能够使用其他物理路由器来bypass this issue,但是我不知道为什么它起作用。可悲的是,这并不是一个真正的“解决方案”。

我讨厌这不是一个很好的答案,但我至少希望在公开问题上分享讨论。祝你好运,并及时通知我们。

答案 1 :(得分:-1)

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

  1. 使用标准工具(如top,htop,strace等)调查容器内资源的利用率。或者,当这些实例处于峰值运行状态时,您可以使用docker 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

    1. 编辑:要检查的另一件事是实际系统接口的MTU和docker接口上的设置。使用 --mtu=BYTES设置docker值的MTU以匹配系统接口的MTU值