無圖形介面的伺服器、容器、嵌入式裝置如何測試網速?speedtest-cli 以 Python 實作 Speedtest.net 協議,無需瀏覽器、Flash、JavaScript,純命令列即可測量上/下行頻寬、延遲、抖動、封包損失,支援指定測試節點、輸出 JSON/CSV、分享圖片連結。本文涵蓋安裝、基礎/進階用法、自動化監控腳本、常見問題。
# 系統級安裝
sudo pip3 install speedtest-cli
# 或使用者級 (不需 root)
pip3 install --user speedtest-cli
export PATH="$HOME/.local/bin:$PATH"
| 發行版 | 指令 |
|---|---|
| Debian / Ubuntu | sudo apt update && sudo apt install speedtest-cli |
| RHEL / CentOS / Fedora | sudo dnf install speedtest-cli (啟用 EPEL) |
| Arch | sudo pacman -S speedtest-cli |
| Alpine | apk add speedtest-cli |
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
sudo mv speedtest-cli /usr/local/bin/
# 自動選最近節點測試
speedtest-cli
# 輸出範例:
# Retrieving speedtest.net configuration...
# Testing from ISP Name (IP)...
# Retrieving speedtest.net server list...
# Selecting best server based on ping...
# Hosted by Server Name (City, Country) [km]
# Testing download speed........................................
# Download: 945.32 Mbit/s
# Testing upload speed..........................................
# Upload: 512.45 Mbit/s
# Share results: https://www.speedtest.net/result/123456789.png
| 參數 | 功能 | 範例 |
|---|---|---|
--server ID | 指定測試節點 ID (先用 --list 查詢) | speedtest-cli --server 12345 |
--list | 列出所有節點 (含 ID、距離、延遲) | speedtest-cli --list | grep Taiwan |
--mini URL | 使用自架 Speedtest Mini 伺服器 | speedtest-cli --mini https://speedtest.example.com/speedtest.php |
--source IP | 指定來源 IP (多網卡環境) | speedtest-cli --source 192.168.1.100 |
--timeout SEC | 設定超時秒數 (預設 10s) | speedtest-cli --timeout 30 |
--secure | 使用 HTTPS 連線 Speedtest.net | speedtest-cli --secure |
--no-pre-allocate | 不預先分配記憶體緩衝 (低記憶體裝置) | speedtest-cli --no-pre-allocate |
--bytes | 以 Bytes/s 顯示而非 bits/s | speedtest-cli --bytes |
--share | 產生分享圖片連結 | speedtest-cli --share |
--simple | 簡潔輸出 (適合腳本解析) | speedtest-cli --simple |
--csv | CSV 格式輸出 | speedtest-cli --csv |
--csv-header | 輸出 CSV 標題列 | speedtest-cli --csv-header |
--json | JSON 格式輸出 (含所有細節) | speedtest-cli --json |
#!/bin/bash
# /usr/local/bin/speedtest-log.sh
LOGFILE="/var/log/speedtest.csv"
# 首次執行寫入標題
[[ -f "$LOGFILE" ]] || speedtest-cli --csv-header | sed 's/^/timestamp,/' > "$LOGFILE"
# 記錄
speedtest-cli --csv | sed "s/^/$(date -Iseconds),/" >> "$LOGFILE"
# 加入 crontab 每小時執行
0 * * * * /usr/local/bin/speedtest-log.sh
#!/bin/bash
THRESHOLD=100000000 # 100 Mbps = 100,000,000 bits/s
RESULT=$(speedtest-cli --json)
DOWNLOAD=$(echo "$RESULT" | jq -r '.download')
if (( $(echo "$DOWNLOAD < $THRESHOLD" | bc -l) )); then
echo "$RESULT" | jq -r '"下行頻寬異常: \(.download/1000000) Mbps, 節點: \(.server.name), 時間: \(.timestamp)"' | \
mail -s "網速告警" admin@example.com
fi
# 存檔
echo "$RESULT" | jq -c . >> /var/log/speedtest.jsonl
# 臨時容器測試 (不污染宿主機)
docker run --rm --net=host ghcr.io/sivel/speedtest-cli:latest
# 指定節點
docker run --rm --net=host ghcr.io/sivel/speedtest-cli:latest --server 12345 --json
| 問題 | 原因 | 對策 |
|---|---|---|
| 測試速度遠低於預期 | Speedtest.net 節點頻寬限制、單執行緒、TCP 視窗、VPS 共享頻寬 | 多測幾個節點 (--list 指定)、對比 iperf3 內網測試 |
| Speedtest.net API 變更、舊版本不相容 | 升級 pip3 install --upgrade speedtest-cli 或用 Docker 最新映像 | |
| 網路不通、DNS 解析失敗、防火牆擋 80/443 | 檢查 curl speedtest.net、dig speedtest.net | |
| 舊版本不支援 IPv6 節點選擇 | 升級至 2.1.3+,或指定 IPv4 節點 --server | |
| 系統 Python 與虛擬環境混用 | 用 python3 -m pip install 或 Docker 隔離 |
# 伺服器端
iperf3 -s
# 客戶端
iperf3 -c SERVER_IP -t 30 -P 4 # 30秒、4並行流
# 輸出真實 TCP 頻寬、重傳、擁塞窗口,不受 Speedtest.net 節點限制
speedtest-cli 以「零依賴圖形介面、標準化輸出、易於自動化」成為 Linux 命令列測速首選。配合 cron、Prometheus、Grafana,即可建立全天候網路品質監控體系,讓頻寬問題無處遁形。
Ubuntu 編輯應用程式選單:alacarte 工具與 .desktop 檔案手動管理
traceroute 追蹤網路路徑:Linux/Windows 差異、TTL 原理、三次探測、參數全表、防火牆導致星號、DNS 解析延遲、跳數限制、IDC 故障回報
Linux 進程排程算法深度解析:FCFS、RR、多級回饋佇列、實時排程與 CFS 完全公平排程器
CentOS 6.5 安裝 OpenCV 2.3.1 完整實戰:依賴套件、cmake 編譯、環境配置、測試驗證
Ubuntu 系統程式錯誤彈窗解決方案:Apport 錯誤回報機制完整停用與調優指南