2016-07-24 627 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