ulimit 命令主要用于控制用戶進程的資源使用情況,比如文件描述符的數(shù)量、并發(fā)進程的數(shù)量等。不過,ulimit 并不具備直接限制網(wǎng)絡(luò)帶寬的功能。如果需要對網(wǎng)絡(luò)帶寬加以限制,可以借助其他工具實現(xiàn),比如 tc(Traffic Control)以及 nftables。
以下是利用 tc 工具來限制網(wǎng)絡(luò)帶寬的一個例子:
-
首先,確認您的系統(tǒng)已經(jīng)安裝了 iproute2 軟件包,該軟件包內(nèi)含 tc 命令。對于不同的 Linux 發(fā)行版本,可以通過以下命令安裝:
sudo apt-get install iproute2 # Debian/Ubuntu sudo yum install iproute # centos/RHEL sudo dnf install iproute # Fedora
-
設(shè)置一個名為 1: 的 qdisc(隊列規(guī)則):
sudo tc qdisc add dev eth0 root handle 1: htb default 30
-
對默認類創(chuàng)建一個 HTB(Hierarchical Token Bucket)類:
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
此命令會把網(wǎng)絡(luò)接口 eth0 的總帶寬限制為 1 Mbps。您可以按照需求調(diào)整 rate 和 ceil 參數(shù)。
-
為特定的應(yīng)用程序創(chuàng)建一個子類:
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500kbps ceil 1mbit
這個命令會給您的應(yīng)用程序分配 500 kbps 的帶寬。您可以根據(jù)自己的需求調(diào)整 rate 和 ceil 參數(shù)。
-
利用 iptables 把應(yīng)用程序的流量標記成 10:
sudo iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 10
這條命令會將發(fā)送到端口 80 的 TCP 流量標記為 10。您可以根據(jù)需要修改端口號和協(xié)議。
-
將標記過的流量綁定到子類上:
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
現(xiàn)在,您的應(yīng)用程序應(yīng)當受到 500 kbps 帶寬的約束。需要注意的是,上述設(shè)置可能會在系統(tǒng)重啟之后失效。為了讓它們在開機時自動生效,您可以把這些命令加入到系統(tǒng)的啟動腳本當中。
假如您希望擁有更加高級的帶寬管理能力,不妨嘗試使用 nftables 或者一些第三方工具,像 Wondershaper、trickle 等。