Linux限制进程带宽分三类:trickle按进程限速(无需root,仅支持动态链接TCP程序);tc+iptables按端口/协议标记限速(需root,精准系统级);wondershaper网卡级限速(最简但影响同网卡所有流量)。

Linux中限制进程带宽流量,核心思路是区分“按进程”和“按网络流”两类控制方式:前者聚焦单个程序的出入口速率(用户空间轻量级),后者通过内核层对端口、IP或协议打标限速(系统级精准)。选哪种取决于你是否能修改运行方式、是否需要root权限、以及是否要求全局生效。
用trickle限制单个进程的上下行速率
适合普通用户快速控制某个命令(如wget、curl、rsync、scp)的带宽,无需root权限,不改系统配置。
- 安装:Ubuntu/Debian执行sudo apt install trickle;CentOS/RHEL启用EPEL后运行sudo yum install trickle
- 基本用法:trickle -d 200 -u 50 wget https://example.com/bigfile.zip——限制下载200KB/s、上传50KB/s
- 注意:只支持动态链接的TCP程序;不适用于sshd、ping、静态编译程序或setuid程序(如sudo)
用tc + iptables按端口/协议限速(进程级映射)
当进程固定使用某端口(如Java服务监听9001、Nginx跑在80端口),可通过网络层标记该端口所有流量,实现等效“进程带宽控制”。需root权限,效果稳定。
- 清空旧规则:tc qdisc del dev eth0 root 2>/dev/null
- 建HTB根队列:tc qdisc add dev eth0 root handle 1: htb default 30
- 创建限速类(例如限9001端口为3Mbps):tc class add dev eth0 parent 1: classid 1:1 htb rate 3mbit
- 用iptables标记该端口流量:iptables -A OUTPUT -t mangle -p tcp --sport 9001 -j CLASSIFY --classid 1:1
- 绑定标记与队列:tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1:1 classid 1:1
用wondershaper简化网卡级限速
若目标进程是本机唯一高流量应用(如后台同步服务),直接限制整张网卡的上下行,操作最简,适合运维快速兜底。
- 安装后执行:sudo wondershaper eth0 5000 500——下行5Mbps、上行500Kbps
- 清除限制:sudo wondershaper clear eth0
- 优点:命令直观、自动处理tc底层细节;缺点:是接口级而非进程级,同一网卡其他程序也会被波及
补充:监控与持久化
限速后建议实时验证效果:
- 看实时流量:iftop -P 9001 或 nethogs eth0
- 保存iptables规则(Debian/Ubuntu):sudo iptables-save > /etc/iptables/rules.v4
- 让tc规则开机生效:写入/etc/network/if-up.d/limit-bandwidth脚本并设可执行权限


















