在启动后,是否有任何工具限制进程的networking吞吐量? 简单的例子:你注意到一个用户使用scp获取所有的上传带宽,你想限制速度或者降低传输的优先级。
我想我可以使用iptables / tc或pf的组合来实现这一点,但我想知道是否有一个“一次性”工具可用(像涓stream与–pid选项^^)?
不幸的是FreeBSD没有这样的解决scheme。 有很多解决scheme,像dummynet / ipfw或altq / pf,用于限制基于不同模式的networking使用,但不在pids上。
在Linux上,有一种方法可以限制用户的networking使用情况:
iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1
我认为没有办法来限制基于pid的networking利用率。
lsof进程来获取proc正在使用的networking端口。 一旦你知道哪些端口正在被使用,你可以使用IPTABLES规则来限制这些端口。 这些文章应该给你一个更好的主意: http: //linux-ip.net/articles/Traffic-Control-HOWTO/ http://blog.edseek.com/~jasonb/articles/traffic_shaping/ http://维基。 sun.com/pages/viewpage.action?pageId=49906332
在Linux中,甚至iptables和tc的组合也可能是一个难题,因为“–pid-owner”选项已经从“owner”iptables模块中被抛弃了(参见下面的表格)。 实际上,只有这个关联(包过程)似乎很复杂,而我们可以很容易地完成剩下的工作,即过滤和限制包的效率。
我不认为有一个现成的解决scheme。 但是,使用标准的Linux工具,你可以破解一个脚本,将做的事情。
首先,您可以使用lsof获得特定进程的所有连接的列表。 然后,您可以使用tc为这些连接创build入口策略。
重要的是,如果你的stream程精简到+20,那么系统上运行的其他任何东西都会得到优先权,而且工作将被安排得更less,所以会发现填充缓冲区或进程数据包更困难,这会导致一些TCP节stream。 这将是零星的,但可能有所帮助。
# renice 20 -p $pid