快轉到主要內容

Linux網路限速工具,WonderShaper與Trickle用法介紹

· 民國114年乙巳年
· ·
分類   Linux系統 Linux使用技巧
標籤   NetworkManager
目錄

Limit Linux’s network bandwidth and uploading/downloading rate.

Ivon今天要分享限制Linux網路速度的工具,限制Linux電腦下載與上傳檔案的速度。以Ubuntu為例。

讓網路速度細水長流。此圖使用FLUX.1-schnell生成

咦?網路不是越快越好嗎?是這樣沒錯啦,但有些場合可能要限制網速。就比如Ivon家裡網路太慢,某個程式一下載東西,其他程式的頻寬就被吃光了!頻寬佔用的情況嚴重到KDE Plasma桌面還會以為我的電腦斷線了呢!

此外,如果Ivon在遠端SSH工作的時候不小心開了一個程式吃光網路頻寬,那麼SSH連線甚至會被被迫切斷,這還挺惱人的!

不是每個程式都有網速限速功能,所以要用其他工具來控制。

Ivon不想要透過路由器端限速,所以選了這兩個工具:WonderShaper與Trickle,都是命令行。我找不到圖形界面的限速工具。

還請注意這篇文章Ivon只討論Linux桌面限速的方式,作用的範圍是在Linux電腦本機而已,沒有討論伺服器如何應對外來連線限速!如果要達成此操作,請移步nginx。

還有,這裡只有討論如何限制網路速度,沒有討論如何針對行動網路資費限制流量。那個應該是ModemManager要做的事情!

1. 網速測試工具
#

  1. 用speedtest-cli測試網速,了解目前電腦網路最高上傳與下載速度為何。參考Github指示安裝。
sudo apt install speedtest-cli --share
  1. 執行speedtest-cli指令等待結果回傳,單位為Mbps,請自行換算。

  2. 再用Nethogs小工具,查看那些程式正在佔用網路頻寬,能方便找出吃網速的元兇。

sudo apt install nethogs
  1. 執行sudo nethogs指令能夠看到佔用頻寬最多的程式

2. WonderShaper限制網路介面網速
#

WonderShaper封裝了tc指令,簡化操作,它是以網路介面下去限制的,例如針對「乙太網路」限速,則所有使用這個介面的程式都會受到限制。

這樣做的好處是可以單獨限制Docker裡面程式的網速(如果都走docker0的橋接器的話),而不影響宿主機服務。

  1. 參考Github說明安裝,發行版套件庫收的可能是舊版套件。由於它只是個指令稿,所以直接從Github下載安裝就行了。
git clone https://github.com/magnific0/wondershaper.git

cd wondershaper

chmod +x wondershaper

sudo mv wondershaper /usr/local/bin
  1. 利用NetworkManager列出Linux目前所有的網路界面,例如我的乙太網路界面叫做enp2s0
sudo nmcli
  1. 加上引數-a選取enp2s0界面,後面用-u-d限制上傳與下載的速度,這裡單位為Kbps。所以這條指令會將上傳與下載速度的上限設定為1Mbps
sudo wondershaper -a enp2s0 -u 1024 -d 1024
  1. 嘗試執行speedtest-cli測速,應該會發現網路變慢了。

  2. 解除網速限制:

sudo wondershaper -c -a enp2s0
  1. 如果要在開機後執行WonderShaper的規則,把它做成Systemd服務。首先要新增全域設定檔。
sudo vim /etc/systemd/wondershaper.conf
  1. 設定全域的設定值:
[wondershaper]

# 網路界面
IFACE="enp2s0"

# 上傳速度
USPEED="1024"

# 下載速度
DSPEED="1024"
  1. 取得WonderShaper開發者提供的Systemd檔案
sudo wget https://raw.githubusercontent.com/magnific0/wondershaper/refs/heads/master/wondershaper.service -P /etc/systemd/system
  1. 啟動WonderShaper服務。
sudo systemctl daemon-reload

sudo systemctl enable --now wondershaper

3. Trickle限制單一程式網速
#

跟WonderShaper不同,Trickle僅針對單一程式限速。

值得注意的是:

  • Tirckle只對glibc的程式有效,請用ldd 二進位檔路徑 | grep libc.so確認該程式是否有連結到libc。
  • 無法限制會fork行程的程式。不過我測試Trickle對Firefox和Chromium是有效的。
  • 無法限制使用UDP通訊埠的程式。想知道程式使用哪個通訊埠,請利用指令sudo lsof -i -P -n查看。

執行Trickle的時候不需要sudo。

  1. 參考Github指示安裝Trickle。這個程式的作者似乎沒在維護了,如果找不到請手動下載deb安裝。
sudo apt install trickle
  1. Trickle只對新啟動的程式有效。用法如下,加上trickle指令與參數,限制該程式的網速,單位為Kbps。例如,限制wget指令的上傳下載網速為1Mbps:
trickle -u 1024 -d 1024 wget "file-to-download"
  1. 要停止限速,請執行killall trickle

  2. 可以改用trickled對目前所有的程式限速,它會在背景執行:

trickled -u 1024 -d 1024
  1. 你可以編輯Trickled設定檔,限制特定幾個程式的網速,不讓重要的連線被影響。Trickled的全域設定檔位置應該放在/etc/trickled.conf

  2. 該檔案是針對個別程式限速的設定檔,沒有列在檔案裡面的程式就不會被限速。Priority表示優先度,數字越大分到的頻寬越多。Time-Smoothing為允許程式傳送資料的秒數間隔,Length-Smoothing則是I/O操作長度作為時間間隔。使用這個設定檔之後執行Trickled指令,便只會對這些程式限速。

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[scp]
Priority = 2
Time-Smoothing = 0.1
Length-Smoothing = 2

[wget]
Priority = 3
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 4
Time-Smoothing = 5
Length-Smoothing = 20

相關文章

遠端開機:Ubuntu如何啟用Wake-On-Lan,透過NetworkManager設定
分類   Linux系統 Linux使用技巧
標籤   Remote Desktop Ubuntu NetworkManager
Linux桌面如何啟用深色模式 & 自動切換深色桌布 & 開啟夜間光線
分類   Linux系統 Linux使用技巧
標籤   Linux GNOME KDE Plasma
雙顯卡Linux筆電很耗電?用EnvyControl切換Nvidia獨顯,還可以省電
分類   Linux系統 Linux使用技巧
標籤   Nvidia Linux GNOME KDE Plasma

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。