繁体   English   中英

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

[英]Very slow network performance of Docker containers with host's network

我遇到了 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 代理(以便代理和容器在同一主机上运行); 问题仍然存在。 我的工作局域网和家庭网络都存在此问题。

理论上,可能是 C++ 程序在 Docker 容器中通常很慢。 但我怀疑情况是否如此,因为根据我的经验,C++ 代码在 Docker 中的总体性能与在本机环境中一样快。

问题

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

我怀疑容器的默认内存和 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设置--mtu=BYTES值的 MTU 以匹配系统接口的 MTU 值

您的问题听起来与 Docker for Mac 存储库上的这个未解决的问题非常相似。 不幸的是,似乎没有已知的解决方案,但其中的讨论可能有用。 个人目前的猜测是,该错误存在于 Docker for Mac 上专门使用的 hyperkit 虚拟化附近。

就我而言,我奇怪地能够通过使用不同的物理路由器绕过这个问题,但我不知道它为什么会起作用。 可悲的是,这并不是真正的“解决方案”。

我讨厌这不是一个很好的答案,但我想至少在公开问题中分享讨论。 祝你好运,让我们知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM