Linuxの現場で、こういった疑問は思いのほかよく出てきます。特にクラウド環境や複数拠点をまたぐ構成では、「ネットワークが原因なのか、アプリが原因なのか」の切り分けが難しいことが多い。
この記事では、Linuxサーバー間のネットワーク帯域幅を実測できる
iperf3 コマンドの使い方を解説します。インストール手順から基本的なサーバー/クライアント構成、UDPテスト・並列ストリーム・双方向テストといった実務で役立つオプションまで、RHEL 9.4 / Ubuntu 24.04 LTS の両環境で動作確認済みの手順でご紹介します。この記事のポイント
・iperf3 は1コマンドでTCP/UDP帯域幅をサーバー間で実測できる
・サーバー側で iperf3 -s、クライアント側で iperf3 -c を実行する
・-P オプションで並列ストリームを使うと実効スループットに近い値が得られる
・firewalld / UFW のポート開放を忘れると接続できないので注意
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
iperf3とは?なぜ使うのか
iperf3 は、2点間のネットワーク帯域幅をTCPまたはUDPで測定するオープンソースのネットワーク診断ツールです。もともとは大学の研究プロジェクトで開発され、現在はデータセンター・クラウドインフラの現場でも広く使われています。「ping で応答があるから大丈夫」と思っている方は要注意です。ping が返ってきても、実際のデータ転送に使えるスループットは全く別の問題です。iperf3 を使えば、次のような状況を実測で確認できます。
・クラウド(AWS/GCP/Azure)の同一リージョン内サーバー間の実効帯域
・オンプレミスとVPN経由のクラウドをつないだ際の帯域劣化
・社内ネットワークの新旧スイッチ交換後の改善効果
・NASやiSCSIのネットワーク経路が細くなっていないかの確認
私がセミナーで受講生から質問を受けるシナリオのひとつに「バックアップが遅い」があります。こういったケースでも、iperf3 でネットワーク帯域を先に測定しておくと、ストレージ側の問題なのかネットワーク側の問題なのかを素早く切り分けられます。
インストール手順
1. RHEL 9 / AlmaLinux 9 / Rocky Linux 9
iperf3 は EPEL(Extra Packages for Enterprise Linux)リポジトリに含まれています。まず EPEL を有効化してからインストールします。# EPELリポジトリを有効化 sudo dnf install -y epel-release # iperf3をインストール sudo dnf install -y iperf3 # バージョン確認 iperf3 --version
iperf 3.14 (cJSON 1.7.15) Linux 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC ... Optional features available: ...
2. Ubuntu 24.04 LTS
Ubuntu の場合は公式リポジトリに含まれているため、apt でそのままインストールできます。sudo apt update sudo apt install -y iperf3 # バージョン確認 iperf3 --version
基本的な使い方:サーバー/クライアント構成
iperf3 は必ず「サーバー側」と「クライアント側」の2台で動かします。単一マシンだけでは測定できません。1. サーバー側の起動(測定される側)
帯域を測定したい経路の「受信側」となるマシンで以下を実行します。# iperf3サーバーを起動(デフォルトポート5201でリッスン) iperf3 -s # バックグラウンドで起動する場合 iperf3 -s -D # ポートを変更する場合(ファイアウォール設定と合わせること) iperf3 -s -p 5200
----------------------------------------------------------- Server listening on 5201 (test #1) -----------------------------------------------------------
2. クライアント側から接続して測定
「送信側」となるマシンから接続します。-c の後にサーバーのIPアドレスまたはホスト名を指定します。# 基本的なTCP帯域測定(デフォルト10秒間) iperf3 -c 192.168.1.100 # 測定時間を30秒に変更 iperf3 -c 192.168.1.100 -t 30 # 結果をJSON形式で出力 iperf3 -c 192.168.1.100 --json
Connecting to host 192.168.1.100, port 5201 [ 5] local 192.168.1.50 port 52314 connected to 192.168.1.100 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 112 MBytes 941 Mbits/sec 0 3.06 MBytes [ 5] 1.00-2.00 sec 112 MBytes 941 Mbits/sec 0 3.06 MBytes ... - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec 0 sender [ 5] 0.00-10.00 sec 1.09 GBytes 936 Mbits/sec receiver
・Bitrate (sender):クライアントが送信したスループット
・Bitrate (receiver):サーバーが受信したスループット
・Retr:TCP再送回数。0なら通信品質は良好
・Cwnd:TCPの輻輳ウィンドウサイズ
ファイアウォールの設定(接続できない時の対処)
iperf3 を起動しても接続できない場合、ファイアウォールがポート 5201(デフォルト)をブロックしている可能性があります。firewalld(RHEL系)の場合
# ポート5201/TCPを開放(測定中のみ一時的に許可する場合) sudo firewall-cmd --zone=public --add-port=5201/tcp --temporary # UDPテストも行う場合は追加 sudo firewall-cmd --zone=public --add-port=5201/udp --temporary # 現在の設定を確認 sudo firewall-cmd --list-all
--permanent を付けて firewall-cmd --reload を実行してください。Linux ポート確認の全コマンドも参考に、使用中のポートを事前に確認しておくと安心です。UFW(Ubuntu)の場合
# ポート5201を開放 sudo ufw allow 5201/tcp sudo ufw allow 5201/udp # 設定確認 sudo ufw status verbose
応用・実務Tips
1. 並列ストリームで実効スループットを測定する
デフォルトの1本のTCPストリームでは、実際のアプリケーション(ファイル転送・DBレプリケーション等)での多重接続環境を再現できません。-P オプションで並列ストリーム数を指定すると、より実態に近いスループットが測定できます。# 4並列ストリームで測定 iperf3 -c 192.168.1.100 -P 4 # 8並列ストリームで測定(マルチコア環境向け) iperf3 -c 192.168.1.100 -P 8
[SUM] 行として合計スループットが表示されます。2. UDPで帯域とパケットロス率を測定する
UDP測定は、VoIP・動画ストリーミング・リアルタイム系アプリの帯域設計に役立ちます。# UDP帯域測定(-b で帯域上限を指定。0なら無制限) iperf3 -c 192.168.1.100 -u -b 100M # 500Mbpsで測定する場合 iperf3 -c 192.168.1.100 -u -b 500M
・Jitter:パケット到着間隔のばらつき(msで表示、小さいほど良い)
・Lost/Total Datagrams:パケットロス率(0%が理想)
3. 双方向同時測定(bidir)
通常の測定はクライアント→サーバーの一方向です。双方向同時の帯域を測定する場合は--bidir オプションを使います。# 双方向同時測定 iperf3 -c 192.168.1.100 --bidir
4. TCPバッファサイズの調整
長距離・高遅延ネットワーク(東京-大阪間など)ではTCPのウィンドウサイズがボトルネックになることがあります。# TCPウィンドウサイズを128MBに拡張して測定 iperf3 -c 192.168.1.100 -w 128M
トラブルシュート・エラー対処
「error - unable to connect to server: Connection refused」が出る
サーバー側でiperf3 -s が起動していないか、ポートが違います。・サーバー側で
iperf3 -s が実行されているか確認する・ポート指定が一致しているか確認する(デフォルトは5201)
・ファイアウォールの設定を確認する(前述の firewalld/UFW の手順を参照)
「error - unable to connect to server: Connection timed out」が出る
ネットワーク経路の問題かファイアウォールによるドロップが原因です。・
ping 192.168.1.100 でICMPは通るか確認する・
telnet 192.168.1.100 5201 でポート疎通を確認する(通れば「Connected」と表示される)・セキュリティグループ(AWSの場合)やネットワークACLで5201が許可されているか確認する
期待より大幅に低い帯域が出る
以下の原因が考えられます。・NICのネゴシエーション速度を確認する(
ethtool eth0 で Speed: の値を見る)・
-P 4 など並列ストリームを増やして測定する(TCP1本では帯域を使い切れないことがある)・測定中に
sar -n DEV 1 や vmstat 1 でCPUがボトルネックになっていないか確認する・QoS・帯域制限機能が経路上に設定されていないか確認する
サーバーとクライアントのバージョンが異なる場合
iperf3 はバージョン間の互換性が厳しく、バージョン差が大きいと接続に失敗することがあります。# 両サーバーのバージョンを確認 iperf3 --version
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| サーバーを起動する | iperf3 -s |
| TCP帯域測定(基本) | iperf3 -c <サーバーIP> |
| 測定時間を変更する | iperf3 -c <サーバーIP> -t 30 |
| 並列ストリームで測定する | iperf3 -c <サーバーIP> -P 4 |
| UDP帯域・パケットロスを測定する | iperf3 -c <サーバーIP> -u -b 100M |
| 双方向同時測定する | iperf3 -c <サーバーIP> --bidir |
| TCPウィンドウサイズを調整する | iperf3 -c <サーバーIP> -w 128M |
| JSON形式で結果を出力する | iperf3 -c <サーバーIP> --json |
ポート確認の手順については Linux ポート確認の全コマンド もあわせてご確認ください。NTPによるサーバー時刻同期(ntpd 時刻同期設定)はログのタイムスタンプを正確に保つために、帯域測定のような精密な作業の前後で確認しておくことをおすすめします。
iperf3で帯域を測れたら、次はサーバー構築の全体像を学びませんか?
ネットワーク帯域を実測できるようになると、障害切り分けの精度が格段に上がります。その力を活かして、体系的にLinuxサーバー構築を学んでみませんか。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:bashのヒアドキュメント(here document)の使い方|設定ファイル生成・コマンド入力・インデントの実践例
- 前のページへ:gitコマンドの使い方入門|init・clone・commit・pushの基本とLinuxサーバーでの実践例
- この記事の属するカテゴリ:Linuxtips・ネットワークへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます