带有主机网络的Docker容器的网络性能非常慢

Tru*_*ong 6 macos networking mqtt docker 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构建。

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

从理论上讲,可能是Docker容器中的C ++程序通常运行缓慢。但是我怀疑是这种情况,因为根据我的经验,Docker中C ++代码的一般性能与在本机环境中一样快。

可能是这个问题的原因?Docker中是否有任何设置可以解决此问题?

San*_*Dey 3

我怀疑容器的默认内存和 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 可用的各种资源分配参数。 在此输入图像描述

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