如何限制现有进程的下载带宽? (iptables、tc、?)

如何限制现有进程的下载带宽? (iptables、tc、?)

我很高兴通过端口限制上传速度 - 但真的想通过进程限制下载。

看来 iptables 确实具有按进程以--pid-owneror的形式匹配和标记数据包的功能--cmd-owner- 但现在两者都已被删除?

$ iptables -m owner --help
...
owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists

似乎有按用户或组匹配的选项,但没有按进程匹配的选项。

我知道trickle和wondershaper - 但都不允许对已经运行的进程进行整形

答案1

将进程放入net_clscgroup 中,使用 cgroup 设置数据包的类别,然后使用有类过滤器tc对该类别中的数据包进行速率限制。例如:

cgcreate -g net_cls:slow
echo 0x10001 > /sys/fs/cgroup/net_cls/slow/net_cls.classid
cgclassify -g net_cls:slow <pid of the process you want to limit>
tc qdisc add dev eth0 root handle 1: htb
tc filter add dev eth0 parent 1: handle 1: cgroup
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbps

这应该意味着您指定的进程(及其任何子进程)的带宽限制为每秒 1 兆字节 - 将最后一个命令的参数调整为您想要的任何带宽。

相关内容