如何限制系统范围内的网络活动?
假设我正在使用 cron 或 torrent 服务器(或两者)对大型存档运行 rsync。这些活动的运行很重要,但它们的优先级较低:我不希望它们阻塞网络并干扰其他更重要的任务。我该如何限制它们?
我将在 CentOS 主机上的单独专用 KVM 虚拟机中运行这些任务。因此,我更愿意限制整个系统的网络活动。除非另有规定,否则客户机也将是 CentOS。
答案1
您可能希望调查的三个选项。
特定于应用程序的限制器。如上所述,rsync 具有 bwlimit,大多数 torrent 服务器都具有带宽限制功能。优点:设置简单。缺点:不是动态的(例如,如果您在 100Mbps 连接上将限制设置为 20Mbps,则即使没有其他程序产生流量,最多也会使用 20Mbps。
通用用户空间限制器。我只知道 tricklehttp://monkey.org/~marius/pages/?page=trickle优点:设置简单,用途广泛。缺点:不动态。
内核限制器,例如 HTBhttp://lartc.org/howto/lartc.qdisc.classful.html#AEN1071优点:动态带宽分配;广泛的优先级选项。缺点:极其晦涩难懂。您还需要一个分类器:
3a. 使用 net_cls 分类器的 cgroups。(这是基于 KVM 的虚拟化解决方案限制资源的方式)。优点:设置起来相对简单https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/index.html。缺点:需要有支持cgs的内核;仍然需要使用内核限制器。
3b. 另一个是带有 MARK 目标的 iptables。优点:设置相对简单;分类选项广泛。缺点:仍然需要使用内核限制器。
答案2
rsync 有一个限制其自身带宽的选项:--bwlimit
ionice
有时,如果我想确保限制磁盘 I/O 和带宽,我会与 rsync pid 一起运行它。