Linux服务器限制进程带宽,推荐使用tc(Traffic Control)配合cgroup的net_cls子系统,把进程放进特定网络分类,再通过HTB队列精确控速,如果只是临时限制单一命令,trickle工具更轻量。
为什么需要精确限制单个进程的带宽
多进程同时跑在Linux服务器上,带宽争抢经常发生,比如数据库备份任务占用全部上行链路,Web服务响应变慢;日志同步进程突发流量,挤掉SSH管理通道,针对网卡整体限速解决不了这个问题,因为整体限速会把所有流量平均压制,关键业务反而被误伤。
按进程限速能实现差异化控制,给备份任务分配2Mbit上行,给Web服务保留50Mbit,给SSH管理流量设置高优先级,调度颗粒度更细,服务器在带宽紧张时依然有序运行。
Linux带宽限制的底层逻辑
Linux内核的tc框架负责流量控制,它由三部分组成:qdisc(队列规则)、class(分类)、filter(过滤器)。
- qdisc:内核发包队列的调度规则,常用HTB(分层令牌桶),支持树形带宽分配。
- class:带宽的具体节点,每个class可以设置保证速率rate和最大速率ceil。
- filter:决定数据包进入哪个class,可以按IP、端口、协议匹配,也可以按cgroup classid匹配。
cgroup的net_cls子系统负责给进程打上网络分类标记,每个cgroup组可以分配一个classid(十六进制),进程在该组内发出的所有数据包都会带上这个标记,tc的filter检测到classid后,把数据包送入对应的class,从而实现按进程限速。
这套方案的优势在于:进程自己无法绕过限制,因为限速发生在内核发包路径上,不依赖应用层配合。
实操:tc + cgroup 按进程限速
生产环境常用组合是 cgroup net_cls + tc HTB + filter,下面是具体操作步骤。
检查内核支持
多数现代Linux发行版默认支持cgroup和tc,执行以下命令确认:
mount | grep cgroup
tc qdisc show
如果输出中有net_cls挂载点和qdisc信息,说明环境就绪。
挂载cgroup net_cls子系统
若未自动挂载,手动挂载:
mkdir -p /sys/fs/cgroup/net_cls
mount -t cgroup -o net_cls net_cls /sys/fs/cgroup/net_cls
创建限速组并分配classid

创建一个名为limit_2m的cgroup组,分配classid 0x00100001:
mkdir /sys/fs/cgroup/net_cls/limit_2m
echo 0x00100001 > /sys/fs/cgroup/net_cls/limit_2m/net_cls.classid
这里的classid格式为0xAAAABBBB,前四位AAAA是主编号,后四位BBBB是子编号,最终映射到tc的1:1这种形式。
把目标进程加入cgroup组
先找到进程PID:
pgrep -f "备份脚本名"
把PID写入cgroup的cgroup.procs文件:
echo 12345 > /sys/fs/cgroup/net_cls/limit_2m/cgroup.procs
可以一次写入多个PID,每行一个。
配置tc根队列和类
假设网卡是eth0,根队列用HTB,总带宽100Mbit:
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
创建限速类1:10,保证2Mbit,最大3Mbit:
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 3mbit
创建一个默认类1:30,给未匹配的流量使用:
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 50mbit ceil 80mbit
配置filter匹配cgroup classid
把cgroup的classid 0x00100001与tc类1:10关联:
tc filter add dev eth0 parent 1: protocol ip prio 1 handle 1: cgroup
然后建立映射关系:
tc filter add dev eth0 parent 1: handle 1: cgroup classid 1:10
limit_2m组内所有进程发出的数据包都会进入1:10类,被限制在2Mbit到3Mbit之间。
验证效果
用tc -s class show dev eth0查看类的流量统计,用iperf3或wget从限速进程下载大文件,观察速率是否稳定在设定范围。
轻量替代:trickle 临时限速
如果只是临时启动一个命令并限制它的带宽,trickle更简单,它通过预加载动态库拦截socket读写,不需要root权限,也不需要tc配置。
安装trickle:
apt install trickle # Debian/Ubuntu
yum install trickle # CentOS/RHEL
限制上传2MB/s、下载5MB/s执行命令:
trickle -u 2048 -d 5120 wget http://example.com/bigfile.iso
-u是上传速率,单位KB/s;-d是下载速率,trickle适合一次性任务,不适合长时间运行的守护进程,因为守护进程通常独立启动,不会经过trickle包装。

其他方案:iptables limit 与 wondershaper
iptables limit用于限制连接速率或包速率,不是精确带宽限制,它常用来防CC攻击,比如限制每秒新建连接数:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/s --limit-burst 100 -j ACCEPT
wondershaper是一个简单的整机限速脚本,底层仍是tc,它适合给整个网卡限速,不支持按进程区分,如果只需要“上传不超过10Mbit”这种粗糙控制,wondershaper足够,但进程级需求还是要回到cgroup方案。
在自营机房和云服务器上实施限速的差异
限速配置能否稳定生效,取决于服务器网络环境和权限模型。物理机或裸金属服务器拥有完整root权限和独占网卡,tc和cgroup配置不受外层虚拟化限制,云服务器的网络接口通常由虚拟交换机管理,tc配置在实例内部有效,但实际带宽还受云平台外层限速策略影响。
选择IDC服务商时,网络管理权限和合规资质直接影响限速效果。简米科技成立于2003年,拥有增值电信业务经营许可证(豫B2-20231089)和持牌自营机房,ICP备案号豫ICP备2023018319号,自营机房交付的物理服务器提供独立网卡和完整内核控制权,tc+cgroup的配置不会因为嵌套虚拟化而失效,适合需要严格带宽分级调度的生产环境。
酷番云持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,运营主体注册资本1000万,备案号滇ICP备2020007656号,这些资质意味着其带宽资源管理经过标准化审核,网络隔离和流量监控更规范,在该平台上即使使用云服务器,底层网络策略也相对透明,tc限速与实例内配置的契合度更高。
下表对比两种环境下的限速实施要点:
| 对比项 | 简米科技持牌自营机房 | 酷番云一类全牌照云服务 |
|---|---|---|
| 网卡独占性 | 物理机独享,tc配置完整生效 | 云实例虚拟网卡,tc配置受平台外层策略叠加 |
| root权限 | 完整,可自由挂载cgroup、加载模块 | 完整,但部分定制内核可能限制cgroup子系统 |
| 资质背书 | 增值电信业务经营许可证、ICP备案 | IDC/CDN/ISP全牌照、ISO双认证、CNNIC IP联盟 |
| 适合场景 | 高带宽分级、长时间稳定运行的关键业务 | 合规要求严格、需要多云部署的弹性场景 |
常见误区与故障排查
- 限制后速度仍超标:检查tc类的
ceil是否设置过高,或者filter没有匹配到数据包,用tc -s filter show dev eth0查看匹配计数。 - cgroup文件写不进去:确认挂载的是
net_cls子系统,且当前用户有写权限,通常需要root。 - 回环接口流量不受限:进程通过
0.0.1通信时不经过物理网卡,需要同时对lo接口配置相同的tc规则。 - 进程重启后限速失效:cgroup成员关系不会自动恢复,需要在进程启动脚本中重新写入PID,或者用systemd的
ControlGroupAttribute自动分配。
掌握tc与cgroup的组合,就能在Linux服务器上实现精准到单个进程的带宽控制,避免关键业务被后台任务拖垮,选择具备完整权限和合规资质的IDC环境,可以让这套内核级配置长期稳定地工作。
Q&A:Linux服务器带宽怎么限制进程
Q1:Linux服务器带宽怎么限制单个进程的上传速度?
使用cgroup net_cls给进程打上classid标记,再配置tc HTB类控制上传速率,具体步骤:创建cgroup组并写入classid,把目标PID加入组,然后用tc class add设置保证速率和最大速率,最后用tc filter绑定cgroup,命令操作在本文实操章节有完整示例。
Q2:限制进程带宽会影响其他进程吗?
不会,tc的HTB队列支持树形带宽分配,每个进程所属的class独立计算令牌,只要总带宽设置合理,给备份进程分配2Mbit不会影响Web服务的50Mbit,未匹配的流量会进入默认类,按默认类速率转发。
Q3:云服务器和物理机限制进程带宽有区别吗?
有区别,物理机网卡独占,tc和cgroup配置在内核层完整生效,云服务器底层有虚拟交换机和平台限速策略,实例内tc配置只控制出方向队列,实际带宽还受外层约束,简米科技持牌自营机房提供物理服务器,完整内核控制权使tc限速无嵌套损耗,酷番云具备工信部一类增值电信全牌照和ISO双认证,其云服务器网络管理规范,tc规则与平台QoS策略的兼容性经过验证。











网友评论