4

我有一个 golang 实用程序,它通过 https 将大量数据上传到 OpenStack 对象存储。我在 Ubuntu Linux 上运行它,我想确保它的最大上传带宽不超过 2,500KB/s,最好不影响同一系统上的其他用户(即减慢以太网接口)。

我怎样才能做到这一点,最好不改变我的源代码?到目前为止,我已经尝试了几种方法:

  1. 流量整形:我一直无法找出适当的网络整形技术来影响单个进程,尽管我知道使用 and 应该是可能iptablestc。任何有关如何执行此操作的指导将不胜感激。我的网络背景不是很广泛。
  2. 流量限制:我尝试使用flowratego 中的包来限制我对上传的写入。这没有任何明显的效果。我认为这不起作用,因为该github.com/ncw/swift.ObjectCreateFile.Write()方法不会在收到数据时上传数据,而是在关闭时上传数据。不过,我可能会误解这一点。
  3. 涓涓细流:我尝试了该trickle命令,但它与 golang 可执行文件不兼容(请参阅此问题
4

2 回答 2

2

事实证明,您可以将 Golang 进程包装在 Docker 容器中,然后使用该tc实用程序对 Docker 容器的网络接口(从容器内部)进行速率限制。有关执行此操作的示例 Dockerfile,请参阅此答案。

于 2016-11-04T18:11:46.150 回答
1

如果您可以控制实际运行该实用程序的方式,则可以使用涓流

sudo apt-get install trickle #since you're on Ubuntu
trickle -u (upload limit in KB/s) -d (download limit in KB/s) executable

这是一些关于它的附加文档https://wiki.archlinux.org/index.php/Trickle

于 2016-11-03T15:49:29.933 回答