如何限制进程使用的带宽?

Wes*_*ley 48 networking centos bandwidth

我有一台 CentOS 5.7 服务器,它将每晚备份其文件。我担心当备份通过网络传输时,服务器托管的各个站点的访问者会遇到性能下降。

是否可以将进程的最大允许吞吐量限制为网络接口?我想将基于 SSH 的文件传输限制为我可用带宽的一半。这可能在服务器端或客户端;也就是说,我很乐意在发起连接的客户端或接收连接的服务器上执行此操作。

(不幸的是,我无法添加专门用于备份的接口。我可以增加可用吞吐量,但这仅意味着网络传输将完成得更快,但在执行此操作时仍能最大限度地提高连接的总容量。)


一些背景

也许一些背景是有序的。退一步说,我遇到了没有足够的本地空间来创建备份本身的问题。进入SSHFS!备份被保存到表面上是本地驱动器的地方,这样网络服务器本身就没有备份位。

为什么这很重要?因为那似乎会使尊者的使用无效rsync --bwlimitrsync实际上不是这样的转移,也可以,因为我甚至无法腾出空间来保存备份文件。

我可以听到你问:“等等,为什么你甚至需要制作备份文件?为什么不只是rsync源文件和文件夹?” 因为一个叫“Plesk”的烦人的东西混在了一起!这是我的面向客户端的 Web 主机,为了方便使用 Plesk。因此,我使用 Plesk 来启动备份,因为 Plesk 为备份添加了各种额外的魔法,这使得在恢复过程中使用它非常安全。

悲伤的脸

Wes*_*ley 50

我刚刚发现的一种选择是使用涓流

涓流是一个便携式的轻量级用户空间带宽整形器。它可以在协作模式(与涓流)或独立模式下运行。

涓流通过利用 unix 加载器预加载来工作。本质上,它为应用程序提供了通过套接字发送和接收数据所需的功能的新版本。然后,它基于延迟通过套接字发送和接收数据来限制流量。涓流完全在用户空间运行,不需要 root 权限。

  • Trickle 现在似乎在 github 上:https://github.com/mariusae/trickle (3认同)

Mir*_*ici 25

您可以使用iptables标记数据包(--pid-owner ...),然后使用tc来调整流量。此外,“--sid-owner”可用于包含该进程的线程和子进程。

http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

Match --pid-owner
Kernel 2.3, 2.4, 2.5 and 2.6
Example iptables -A OUTPUT -m owner --pid-owner 78
说明 这个匹配用于根据负责它们的进程 ID (PID) 匹配数据包。这个匹配有点难使用,但一个例子是只允许 PID 94 从 HTTP 端口发送数据包(当然,如果 HTTP 进程没有线程化)。或者,我们可以编写一个小脚本,从特定守护程序的 ps 输出中获取 PID,然后为其添加规则。例如,您可以有一个如 Pid-owner.txt 示例中所示的规则

  • 如果这个答案包含一个如何使用 iptables 和 tc 来实现此目的的示例,那就更好了。给定的“iptables -A OUTPUT -mowner --pid-owner 78”示例似乎并不完整(因为它只匹配数据包,它没有说明如何“标记”它们)而“tc”则不是。根本没有解释。 (4认同)

hha*_*amu 23

如果您可以写入管道(或标准输出),则可以安装pv(pipe viewer) 命令。它最初是为了显示通过管道传输的数据的进度而编写的。

tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs

   -L RATE, --rate-limit RATE
          Limit the transfer to a maximum of RATE  bytes  per  second.   A
          suffix of "k", "m", "g", or "t" can be added to denote kilobytes
          (*1024), megabytes, and so on.
Run Code Online (Sandbox Code Playgroud)


Mag*_*lan 8

出于同样的原因,我将 rsync 与 --bwlimit=KBPS 选项一起使用。

我们的 1 Gbit 以太网很容易淹没我们旧的 SCSI320 DAS RAID,基本上 DOS 的一些我们的旧生产设备依赖于它的 NFS 存储。