麒麟os中tc限速仅作用于网卡出向流量,需在真实网卡(如ens33)以root权限配置;全局限速用htb建根队列并设rate,按进程限速依赖systemd的networkmaxrate,按端口限速需iptables标记+tc filter匹配。

麒麟OS需要对特定进程或网卡出口带宽进行硬性限制,防止某程序突发流量挤占全部带宽导致其他服务中断,例如视频转码工具持续打满上行、远程桌面卡顿、内网服务响应延迟等场景。
用tc命令对网卡整体限速
这一步直接作用于物理网卡,适用于所有发往该接口的流量统一管控。先确认目标网卡名:执行 ip link show,记下状态为 UP 的以太网设备(如 ens33、eth0)。【务必确认网卡名正确,填错会导致后续命令无效果甚至网络中断】
执行以下命令,将 ens33 出口总带宽限制为 50Mbps:
sudo tc qdisc add dev ens33 root handle 1: htb default 10
sudo tc class add dev ens33 parent 1: classid 1:1 htb rate 50mbit
sudo tc class add dev ens33 parent 1:1 classid 1:10 htb rate 50mbit
这条命令链建立了一个根队列,把整块网卡的出口能力锁死在 50Mbps,不再受 DHCP 分配或应用层请求影响。若需恢复不限速,运行 sudo tc qdisc del dev ens33 root 即可。
按进程PID限制其网络吞吐
当只想约束某个正在运行的程序(比如 python3 /opt/monitor/agent.py)而不影响系统其他服务时,必须借助 cgroup + tc 组合方案。此方法依赖 systemd 的资源控制机制,仅适用于由 systemd 启动的服务。
第一步:确认目标进程由 systemd 管理。执行 systemctl list-units --type=service | grep -i agent,找到对应 service 名(如 monitor-agent.service)。
第二步:编辑该服务单元文件:sudo systemctl edit monitor-agent.service。
第三步:在打开的临时编辑器中输入以下内容:
[Service]
MemoryLimit=512M
通过聊天(Telegram / 飞书)执行本地 `clawusage` 监控命令。当用户输入 `/clawusage ...`,或提出“查看 Codex 用量”、“开启/关闭自动…”等请求时触发使用。
IOWeight=100
NetworkMaxRate=10M
保存退出后,执行 sudo systemctl daemon-reload && sudo systemctl restart monitor-agent.service。此时该服务进程及其子进程的网络发送速率上限即被设为 10Mbps,且该限制在重启后依然有效。
用iptables+tc实现按端口分流限速
适用于需对某类协议(如 HTTP 流量走 80/443 端口)单独限速的场景,不影响 SSH、数据库等其他端口通信。
方法一:标记目标端口流量
sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
sudo iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1
方法二:绑定标记到 tc 类别
sudo tc qdisc add dev ens33 root handle 1: htb default 10
sudo tc class add dev ens33 parent 1: classid 1:1 htb rate 100mbit
sudo tc class add dev ens33 parent 1:1 classid 1:2 htb rate 5mbit
sudo tc filter add dev ens33 parent 1: protocol ip handle 1 fw flowid 1:2
最后验证是否生效:启动一个持续下载任务(如 wget -O /dev/null http://speedtest.tele2.net/10MB.zip),同时用 watch -n1 'cat /proc/net/dev | grep ens33' 观察实时速率,应稳定在 5Mbps 左右。










