VPS 速度テスト:iperf3・Speedtest CLI・curl でサーバーの帯域幅とレイテンシを測定する方法
きちんとした VPS 速度テストでは、サーバーがどれだけの帯域幅で送受信できるか、そしてサーバーとユーザーの間をパケットがどれくらいの速さで往復するかの 2 点を確認します。このガイドでは、Debian/Ubuntu または CentOS/Rocky/AlmaLinux の JUSTG クラウドサーバー・専用サーバーで、iperf3 の双方向テスト、Speedtest CLI、curl によるダウンロードを使って帯域幅とレイテンシを測定する方法と、ヨハネスブルグ・モスクワ・東京・ソウルのクラウドサーバーで一般的な 500Mbps ポートを基準にした結果の読み方を説明します。
ステップ1:2 台間の帯域幅テスト用に iperf3 をインストール
iperf3 は、自分で管理する 2 台のホスト間の TCP スループットを、Web サイトや CDN を介さずに測定します。JUSTG サーバーと、テスト元のマシン(別のサーバーや手元の PC。Windows 版の iperf3 もあります)の両方に必要です。
# Debian / Ubuntu
apt update && apt install -y iperf3
# CentOS / Rocky Linux / AlmaLinux
dnf install -y iperf3ステップ2:iperf3 サーバーを起動し -R で双方向をテスト
JUSTG サーバーで TCP 5201 番ポートを開放し、iperf3 をサーバーモードで起動します。
# Debian / Ubuntu with UFW
ufw allow 5201/tcp
# CentOS / Rocky / AlmaLinux with firewalld (until next reload)
firewall-cmd --add-port=5201/tcp
# start the iperf3 server (Ctrl+C to stop)
iperf3 -sもう一方のマシンでクライアントを実行します。既定ではクライアントからサーバーへデータを送ります(クライアントから見てアップロード)。-R を付けると方向が逆になり、サーバーからあなたへ送信されます。これは訪問者がページやファイルをダウンロードするときの方向です。-P 4 は並列 4 ストリーム、-t 30 は 30 秒間の測定です。
# upload test: your machine -> JUSTG server
iperf3 -c 203.0.113.10 -P 4 -t 30
# download test: JUSTG server -> your machine (reverse mode)
iperf3 -c 203.0.113.10 -P 4 -t 30 -R最後の [SUM] 行を確認します。receiver の値が実際のスループットで、Retr 列は TCP の再送回数です。
[SUM] 0.00-30.00 sec 1.64 GBytes 470 Mbits/sec 15 sender
[SUM] 0.00-30.03 sec 1.64 GBytes 469 Mbits/sec receiverufw delete allow 5201/tcp)。テスト用サービスをインターネットに開いたままにしないためです。ステップ3:Speedtest CLI(Ookla)または speedtest-cli を使う
2 台目のマシンがない場合は、公開スピードテストサーバーを使うのが手軽です。公式の Ookla Speedtest CLI は Ookla のリポジトリからインストールします。
# Debian / Ubuntu
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | bash
apt install -y speedtest
# CentOS / Rocky Linux / AlmaLinux
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.rpm.sh | bash
dnf install -y speedtest
# run a test (nearest server), list servers, or pick one by ID
speedtest --accept-license --accept-gdpr
speedtest -L
speedtest -s 12345旧来の Python 製ツール speedtest-cli も使えます。Debian/Ubuntu では両者のコマンド名が似ているため、片方を削除してからもう一方を入れてください。
# Debian / Ubuntu
apt install -y speedtest-cli
# any distribution with Python 3
pip3 install speedtest-cli
speedtest-cli --simple
speedtest-cli --list | head -n 20
speedtest-cli --server 12345 --simple結果は選んだテストサーバーに大きく左右されます。混雑したノードや遠いノードでは、ポートに問題がなくても低い数値が出ることがあります。ユーザーに近いノードを含め、2〜3 か所で試しましょう。
ステップ4:curl でダウンロード速度をテスト
実際のファイルダウンロードでは、1 本の HTTP 接続でどれだけ出るかが分かります。回線の良いミラーから大きなファイルを取得し、データは破棄します。
curl -o /dev/null -w "avg speed: %{speed_download} bytes/s, total: %{time_total}s\n" \
https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz
# wget prints the speed in MB/s at the end
wget -O /dev/null https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xzcurl の表示はバイト毎秒です。1,000,000 で割ると MB/s、MB/s に 8 を掛けると Mbps になります。
ステップ5:500Mbps ポートを基準に結果を読み解く
- 単位:500Mbps(メガビット)は理論上 62.5 MB/s(メガバイト)です。TCP/IP のオーバーヘッドを考えると、iperf3 で約 470〜480 Mbps、ダウンロードで約 55〜59 MB/s 出ていればポートを使い切っています。
- 単一ストリームと並列:長距離の経路では、1 本の TCP 接続は遅延によって頭打ちになります。
-P 4の方が大幅に速いなら、ポートは正常で、制約は往復遅延です。 - 方向:行きと帰りで経路が異なるため、アップロードとダウンロードの速度も異なることがあります。
-Rあり・なしの両方を必ず測定してください。 - レイテンシ:iperf3 では測れません。ユーザーの地域へ
ping -c 50を実行し、最小値だけでなく平均とジッターを確認します。 - 相手側:自宅回線、Wi-Fi、混雑した公開テストサーバーが本当のボトルネックであることもよくあります。
ステップ6:ピーク時間帯にテストする
国際回線はユーザーの現地時間の夜に最も混雑します。その時間帯にテストを繰り返し、空いている時間帯と比較してください。簡単なループで複数回の結果を記録できます。
# three tests, 10 minutes apart, saved to a log file
for i in 1 2 3; do date; speedtest-cli --simple; sleep 600; done | tee -a speedtest.logよくある質問
500Mbps の VPS なのに Speedtest で 200 Mbps しか出ません。異常ですか?
必ずしもそうではありません。別のテストサーバーを試し、自分で管理するマシンへ iperf3 の -P 4 で測定し、逆方向も確認してください。複数の方法でポート速度を大きく下回る場合は、出力を添えてサポートへご連絡ください。
中国からのダウンロードがヨーロッパより遅いのはなぜですか?
遅延が大きく、国際回線が混雑しているため、1 本の接続の速度が制限されます。ピーク時とオフピーク時を比較し、MTR で経路も確認しましょう。
iperf3 を常時起動したままにしてもよいですか?
おすすめしません。テスト中だけ起動し、終わったらポートを閉じてください。
それでも解決しない場合は、テスト結果と実施時刻を添えてチケットを送信し、JUSTG テクニカルサポートにお問い合わせください。