许多用户误以为 ulimit 是万能的资源限制工具,当网络带宽跑满时便试图用它来“刹车”。实际上,ulimit 主要用于管理文件描述符、进程数等系统资源,与网络带宽控制之间毫无关联。不过无需担心,Linux 系统提供了专门的带宽控制工具,操作简单且效果显著。

本文直接介绍两个经典工具:一个用于精准限速,另一个用于实时监控带宽占用。
使用 tc 精确限制网络带宽
tc(Traffic Control)是 Linux 内核自带的流量控制工具,能够像专业路由器一样精细化调控带宽。例如,若要将 eth0 网卡的下载速度限制为 1Mbps,只需执行以下三条命令:
sudo tc qdisc add dev eth0 root handle 1: htb default 30
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:1
这些命令看起来可能有些复杂,但逻辑十分清晰:首先创建队列规则(qdisc),然后定义限速类(class),最后通过过滤器将目标流量引导至该类。需要恢复原状时,只需执行一条命令即可移除:
sudo tc qdisc del dev eth0 root
需要注意的是,tc 默认作用于整个网络接口的流量。若要限制特定进程或用户的带宽,则需要结合 cgroups 或 iptables 标记实现。本文暂不深入,后续有机会再详细介绍。
使用 nethogs 实时监控带宽消耗进程
在限速之前,首先要了解哪个进程占用了大量带宽。nethogs 正是为此设计的轻量级工具,它能按进程展示实时网络带宽使用情况,比 iftop 更加直观。安装方法如下:
# Debian/Ubuntu
sudo apt-get install nethogs
# RHEL/CentOS
sudo yum install nethogs
安装完成后直接运行,即可查看 eth0 接口上每个进程的实时上下行速度:
sudo nethogs eth0
界面会动态更新,哪个进程占用带宽最多一目了然。此时再结合 tc 或 cgroups 进行限制,就能精准解决问题。
最后提醒:上述所有操作均需要 root 权限,普通用户无法直接执行。如果需要按用户粒度管理带宽,cgroups 是更可靠的方案——当然,这属于另一个话题了。
