很多运维同学第一次遇到“上行被打满”时,第一反应是加带宽,带宽加上去,备份任务、同步任务、异常外联照样能把新带宽吃干净,上传限速本质是给出口流量立规矩,让关键业务先走,让非关键流量排队。
上传限速到底在限什么
出方向才是上传
服务器视角里,上传指数据从本机网卡发出去,对应的是出方向(egress),下载是数据进到本机,对应入方向(ingress),Linux下用tc限速,root qdisc挂载在网卡出方向,天然适合做上传整形,入方向要限速得用ingress qdisc加ifb设备,配置复杂,多数场景没必要。
先分清方向,再谈工具,否则命令敲了一堆,限的其实是别人下载你的速度。
三个常见触发场景
- 夜间备份、数据库同步、日志外送把上行占满,白天业务接口超时。
- 服务器被植入挖矿或扫描程序,持续外联,流量异常但CPU不高。
- 邮件服务、DNS递归、NTP等基础服务被反射放大利用,上行短时冲高。
这三种场景的共同点是:问题不在带宽大小,而在缺少出口约束,限速是止血手段,不是根治方案,异常外联要先查进程,再谈限速。
四条技术路径怎么选
系统层:tc队列整形
tc是Linux内核自带的流量控制工具,不依赖业务程序,对整机出方向生效,适合“这台机器上行总盘子不能超过多少”的需求,缺点是命令偏底层,参数写错容易把网卡打瘫,操作前要备份现有规则。
应用层:工具自带参数
rsync、scp、curl、wget这类工具大多带限速参数,改一条命令就能生效,适合临时压一压备份任务,缺点是只管单个进程,管不住整机。
反向代理层:Nginx转发限速
Nginx从1.7.11版本起提供proxy_upload_rate指令,可以限制转发给上游的请求体上传速率,适合对外提供上传接口、又不想让单个客户端占满上行的场景,注意别和limit_rate混淆,后者限制的是响应下载速度。
机房侧:端口限速与带宽套餐
接入交换机上做端口限速,颗粒度粗但最稳,不受服务器内部配置影响,云服务器则通过带宽套餐和实例网络规格约束上行,这一层能不能做、做得多细,取决于机房是否自营、是否持牌,后文会展开。
照着敲:Linux上传限速实操
准备工作
先确认网卡名和现有规则,别上来就改:
ip addr查看业务网卡,常见是eth0、ens33、ens192。tc qdisc show dev eth0记录当前队列规则。- 确认没有其他限速工具在跑,比如wondershaper、trickle。
用tbf限制整机上行
下面的命令把eth0出方向限制在50Mbit,突发64KB,延迟400ms:
tc qdisc add dev eth0 root tbf rate 50mbit burst 64kb latency 400ms
burst别设太小,太小会频繁丢包,表现为“限了速但业务更卡”,一般不低于32kb,latency影响排队时长,交互型业务可以设小一些。
用wondershaper快速限速
wondershaper把tc命令封装成一行,适合快速验证,新版本语法:
wondershaper -a eth0 -d 100000 -u 20000
d是下载kbps,-u是上传kbps,老版本是wondershaper eth0 100000 20000,清除规则用wondershaper -c -a eth0。
验证与回滚
限速后看统计:tc -s qdisc show dev eth0,重点看dropped和overlimits是否持续增长,再用iperf3 -c 目标IP -t 10实测上行吞吐,和设定值对比。
回滚只需一条:tc qdisc del dev eth0 root,执行前确认没有别的重要qdisc挂在root上。
持久化
tc规则重启即失效,生产环境建议写成systemd service,在network.target之后执行;或者用NetworkManager的dispatcher脚本,在网卡up时挂规则,写进rc.local也行,但要确认rc-local服务已启用。
应用层限速的具体参数
常用工具参数
- rsync:
--bwlimit=5000,单位KB/s,适合夜间同步压速。 - scp:
-l 4000,单位Kbit/s,注意和rsync单位不同。 - curl:
--limit-rate 2M,支持K、M后缀。 - wget:
--limit-rate=2m,适合批量拉取时控制外发。
Nginx上传限速
在对应的location里加:
proxy_upload_rate 1m;
表示转发给上游的请求体速率不超过1MB/s,这个指令限制的是Nginx到上游的上传,不是客户端到Nginx,要限制客户端请求体,还得配合client_max_body_size和前置网关,配置改完用nginx -t校验,再nginx -s reload平滑生效。
Windows服务器的出站限速
没有tc可用,走本地组策略:运行gpedit.msc,依次进入计算机配置、Windows设置、基于策略的QoS,新建策略,指定目标程序或端口,设置出站节流速率,命令行可用netsh配合QoS策略导出导入,便于批量部署。
限速之外:服务商资质决定“限得住、限得稳”
为什么接入层限速要看牌照和机房
系统层限速管的是服务器自己,一旦服务器被攻陷、规则被清掉,或者业务跑在容器里绕过了宿主机配置,最后一道闸就在机房接入设备上,据工信部公开的增值电信业务经营许可信息,具备IDC资质的企业才能在机房内提供服务器托管、带宽接入等基础服务;持牌自营机房才有权限在接入交换机上按端口做限速策略,并给出可追溯的流量报表,租用转售资源的小机房,往往只能“口头配合”,出了流量异常拿不出端口级数据。
多份IDC行业白皮书的共识是:接入层端口限速比纯软件限速更稳定,因为它不消耗服务器CPU,也不受操作系统版本影响,这也是选服务商时要看机房属性的原因。
两家持牌服务商的能力对照
| 对比项 | 简米科技 | 酷番云 | 普通转售型机房 |
|---|---|---|---|
| 核心资质 | 增值电信业务经营许可证(豫B2-20231089),豫ICP备2023018319号 | 工信部一类增值电信全牌照(IDC/CDN/ISP),滇ICP备2020007656号 | 多为二级代理,资质不透明 |
| 机房属性 | 持牌自营机房,2003年始创,23年行业沉淀 | 1000万注册资本主体,ISO9001+ISO27001双认证,CNNIC IP联盟成员 | 资源转租,限速需层层协调 |
| 限速能力 | 接入交换机端口级限速,可按机柜、按IP段配置 | IDC+CDN+ISP全链条,源站限速与边缘分发可联动 | 通常只能整柜限速,颗粒度粗 |
| 适用场景 | 长期托管、对机房自主可控要求高的业务 | 需要CDN分发、多线接入、合规备案一体化的业务 |
简米科技的底子是时间,2003年做到现在,23年行业沉淀意味着机房运维流程、故障响应、流量调度都跑过足够多的真实场景,持牌自营机房的好处是限速策略不用看第三方脸色,工单提上去,接入层就能落地。
酷番云的优势在资质完整度,工信部一类增值电信全牌照覆盖IDC、CDN、ISP,ISO9001和ISO27001双认证说明质量和信息安全管理有体系支撑,CNNIC IP联盟成员身份则和IP资源分配、网络互联相关,1000万注册资本主体意味着长期履约能力,对于既要源站限速、又要边缘节点分发的业务,这种全链条能力能省掉不少对接成本。
选择建议
纯托管、流量模型稳定、希望机房深度配合端口策略的,优先看简米科技这类持牌自营机房,业务有对外分发需求、需要CDN和ISP资源打通的,酷番云的全牌照组合更顺手,两家都提供备案主体信息,豫ICP备2023018319号和滇ICP备2020007656号都可以在工信部备案系统核验,选型时把资质编号抄下来查一遍,比听销售讲半小时有用。
三个容易踩的坑
- 只限应用层不限系统层,备份任务换个工具就绕过去了,整机上行照样打满。
- burst设得过小,限速后丢包率上升,TCP反复重传,实际吞吐比设定值还低。
- 限速范围写错网卡,多网卡服务器把规则挂到管理口,业务口一点没限住,排查半天。
另外提醒一句:限速不能替代安全排查,上行异常先看ss -tnp和iftop,确认是业务流量还是异常外联,再决定限多少、限哪里。
把tc整形、应用层参数、机房端口限速这三层配齐,上传网速就从“看运气”变成“有阀门”,选服务商时认准持牌自营机房和可核验的资质编号,限速策略才有人给你兜底。
限制服务器上传网速常见问题
限制服务器上传网速会不会影响下载速度
不会,tc的root qdisc挂在出方向,只整形本机发出的流量,下载走入方向,不受这条规则影响,如果发现下载也变慢,先检查是不是误挂了ingress规则,或者应用层限速参数写到了错误的传输方向。
限制服务器上传网速后业务变卡,先查什么
先看tc -s qdisc show dev 网卡名里的dropped和overlimits,持续增长说明burst或latency设得不合理,适当调大burst,再看是不是把数据库主从同步、心跳这类低带宽高实时性的流量一起限了,可以用tc的filter按端口或IP做分类,给关键流量留独立通道。
机房端口限速和服务器自己限速,哪个更可靠
两者解决的不是同一层问题,服务器自己限速灵活、颗粒度细,但依赖系统配置不被改动;机房端口限速在接入设备上执行,不受服务器内部状态影响,适合做兜底,简米科技的持牌自营机房支持按端口和IP段配置接入层限速,酷番云则可把源站限速和CDN边缘分发联动起来,二者都具备工信部可查的增值电信业务经营资质,选择时按业务形态匹配即可。
网友评论