linux

如何用ulimit控制网络带宽

小樊
32
2025-12-15 04:02:42
栏目: 编程语言

ulimit 命令主要用于限制用户进程的资源使用,例如文件描述符的数量、进程数等。但是,ulimit 本身并不提供直接限制网络带宽的功能。

要限制网络带宽,你可以使用其他工具,例如 tc(Traffic Control)和 nftables。下面是使用这些工具限制网络带宽的方法:

使用 tc 限制网络带宽

  1. 首先,确保你的系统已经安装了 iproute2 软件包,它包含了 tc 命令。在大多数 Linux 发行版中,可以使用以下命令安装:
sudo apt-get install iproute2 # Debian/Ubuntu
sudo yum install iproute # CentOS/RHEL
  1. 使用 tc 命令创建一个队列规则(qdisc)来限制网络带宽。例如,要将网络接口 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 class add dev eth0 parent 1:1 classid 1:30 htb rate 1mbit
  1. (可选)如果你想限制特定进程的网络带宽,可以使用 tcu32 过滤器。首先,找到进程的 PID,然后使用以下命令创建一个过滤器:
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport <进程端口> flowid 1:30

<进程端口> 替换为进程使用的端口号。

使用 nftables 限制网络带宽

  1. 首先,确保你的系统已经安装了 nftables 软件包。在大多数 Linux 发行版中,可以使用以下命令安装:
sudo apt-get install nftables # Debian/Ubuntu
sudo yum install nftables # CentOS/RHEL
  1. 创建一个新的 nftables 规则集文件,例如 bandwidth.nft,并添加以下内容:
#!/usr/sbin/nft -f

flush ruleset

table ip filter {
    chain input {
        type filter hook input priority 0; policy drop;
        # 允许本地回环接口的流量
        iif lo accept
        # 允许已建立的连接
        ct state established,related accept
        # 限制带宽
        limit rate over 1mbit burst 10kb burst 10kb accept
        # 拒绝其他所有流量
        drop
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
        # 允许本地回环接口的流量
        iif lo accept
        # 允许已建立的连接
        ct state established,related accept
        # 限制带宽
        limit rate over 1mbit burst 10kb burst 10kb accept
        # 拒绝其他所有流量
        drop
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

over 1mbit 替换为你想要限制的带宽。

  1. 加载 nftables 规则集:
sudo nft -f bandwidth.nft
  1. 若要使规则集在系统启动时自动加载,请将上述命令添加到 /etc/rc.local 文件中(在 exit 0 之前)。

请注意,这些方法可能会影响到系统的网络性能,因此在生产环境中使用时请谨慎。

0
看了该问题的人还看了