限制已启动进程的网络吞吐量?(Linux / FreeBSD)

限制已启动进程的网络吞吐量?(Linux / FreeBSD)

是否有任何实用程序可以在进程启动后限制其网络吞吐量?简单示例:您注意到某个用户使用 scp 占用了您所有的上传带宽,因此您想限制速率或降低传输优先级。

我想我可以使用 iptables/tc 或 pf 的组合来实现这一点,但我想知道是否有可用的“一次性”工具(如带有 --pid 选项的 trickle ^^)?

答案1

不幸的是,FreeBSD 没有这样的解决方案。有许多解决方案,如 dummynet/ipfw 或 altq/pf,它们用于根据不同的模式(而不是 pid)来限制网络使用。

在 Linux 上有一种方法可以根据用户限制网络使用量:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

我认为没有基于 pid 来限制网络利用率的解决方案。

答案2

lsof 该进程以获取该进程正在使用的网络端口。一旦您知道正在使用哪些端口,您就可以使用 IPTABLES 规则来限制这些端口的速率。这些文章应该能让您更好地了解: http://linux-ip.net/articles/Traffic-Control-HOWTO/ http://blog.edseek.com/~jasonb/articles/traffic_shaping/ http://wikis.sun.com/pages/viewpage.action?pageId=49906332

答案3

在 Linux 中,即使 iptables 和 tc 的组合也可能是一个难题,因为“--pid-owner”选项已从“owner”iptables 模块中放弃(参见下表注释)这里)其实,只有这个关联(数据包--处理)看起来很复杂,而其余部分我们可以轻松地完成,即非常有效地过滤和限制数据包。

答案4

粗略地说,如果你将进程优化到 +20,那么系统上运行的任何其他程序都将获得优先级,并且作业的调度频率会降低,因此填充缓冲区或处理数据包会变得更加困难,这会导致一些 TCP 限制。这将是零星的,但可能足够有帮助。

# renice 20 -p $pid

相关内容