在Rocky Linux中为特定应用程序配置网络带宽限制,我主要通过Linux内核的流量控制工具(tc)结合cgroups v2实现,以下是具体实践经验:
-
cgroups v2配置:
- 创建应用专属cgroup:
mkdir /sys/fs/cgroup/app_limiter
- 绑定应用PID:
echo <pid> > cgroup.procs
- 设置带宽上限:
echo "8:0 100Mbit" > cgroup.subtree_control
- 创建应用专属cgroup:
-
TC分层令牌桶(HTB)配置:
tc qdisc add dev eth0 root handle 1: htb tc class add dev eth0 parent 1: classid 1:10 htb rate 90mbit ceil 100mbit tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1: cgroup
-
动态标记挑战:
- 针对动态端口应用(如MySQL),需结合iptables打标记:
iptables -A OUTPUT -t mangle -p tcp --sport 3306 -j MARK --set-mark 0x10 tc filter add dev eth0 protocol ip handle 0x10 fw flowid 1:10
- 针对动态端口应用(如MySQL),需结合iptables打标记:
遇到的典型问题:
- 内核模块冲突:需卸载qdisc_htb后重新加载
- cgroups v2与旧版应用兼容性问题:通过systemd slice单元封装进程
- 虚拟化环境叠加损耗:实际带宽需预留15%的协议开销
建议使用nftables替代iptables实现更高效的包标记,并通过systemd-tmpfiles保持cgroup配置持久化。测试时建议使用tc -s qdisc show dev eth0实时监控流量整形效果。