我有一个golang实用程序,它通过https将大量数据上传到OpenStack Object Storage。我在Ubuntu Linux上运行它,我想确保它的最大上传带宽不超过2,500KB / s,最好不要影响同一系统上的其他用户(即减慢以太网接口)。
我怎样才能做到这一点,最好不要改变我的源代码?到目前为止,我尝试了几种方法:
iptables
和{{1}应该可行}。任何关于如何做到这一点的指导将不胜感激。我的网络背景不是很广泛。flowrate
包来限制我对上传的写入速度。这没有任何可辨别的效果。我认为这不起作用,因为github.com/ncw/swift.ObjectCreateFile.Write()
方法不会在收到数据时上传数据,而是在数据关闭时上传。我虽然错了。tc
命令,但它与golang可执行文件不兼容(请参阅this question)答案 0 :(得分:2)
事实证明,您可以将Golang进程包装在Docker容器中,然后使用tc
实用程序对Docker容器的网络接口(来自容器内部)进行速率限制。请参阅this answer以获取一个Dockerfile示例。
答案 1 :(得分:1)
如果您可以控制实际运行该实用程序的方式,则可以使用trickle
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