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


10

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

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


你是说“ tri流”吗?
2010年

编辑:我认为“ tri流”是故意的。
史蒂文

Answers:


3

不幸的是,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
FreeBSD的ipfw也可以通过uid匹配流量
gelraen 2011年


0

在Linux中,iptables和TC的组合,甚至可能是一个难题,因为“--pid所有者”选项从“主人”的iptables模块抛弃(请参见下表音符在这里)。实际上,只有这种关联(数据包-进程)似乎很复杂,而我们可以轻松完成其余的工作,即非常有效地过滤和限制数据包。


0

我认为目前还没有现成的解决方案。但是,使用标准的Linux工具,您可以修改脚本来完成此操作。

首先,您可以使用lsof获取特定进程的所有连接的列表。然后,您可以使用tc为这些连接创建入口策略。


0

粗略地讲,如果您将进程降低到+20,那么系统上正在运行的其他任何事物都会获得优先级,并且作业的调度频率会降低,因此会发现填充缓冲区或处理数据包更加困难,这将导致某些TCP节流。这将是零星的,但可能会有所帮助。

# renice 20 -p $pid

1
这是试图控制带宽非常迂回的方式,将真正只有当系统工作非常重仓-在空闲的系统埃文reniced -20将在CPU上仍然得到尽可能多就是了一个过程。
voretaq7 2011年

是的,但是如果这不是与其他本地计算机共享的带宽,那么如果计算机处于空闲状态,则您几乎不在乎此过程是否获得了所有带宽。只有在另一个尝试使用带宽的过程才重要。我们可能对“非常重负载”有不同的定义-如果尝试运行另一个进程,它将获得优先级,因此,如果每个内核的平均负载> = 1,这可能会有所帮助。我确实注意到它很粗糙,但是如果它是唯一可用的工具(FreeBSD),那么至少值得一试。
Phil P
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.