iperf3 や ss でネットワークの状態は見られても、「今まさにどの通信が帯域を使っているか」をリアルタイムに把握するには、別のツールが必要です。この記事では、Linux のネットワーク通信をリアルタイム監視できる iftop コマンドの使い方を解説します。接続先ホストごとの帯域表示・フィルタリング・実務でのトラブルシュートまで、現場で即使える内容を網羅しています。
この記事のポイント
・iftop は接続先ホスト単位で帯域をリアルタイム表示できる監視ツール
・インターフェース指定(-i eth0)と BPF フィルタで絞り込み監視が可能
・「どのサーバーとの通信が帯域を食っているか」の特定に最適
・nethogs(プロセス単位)や tcpdump と使い分けることで調査が速くなる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
iftop とは何か|top のネットワーク版
iftop(IF Traffic Output)は、ネットワークインターフェースを流れるパケットをキャプチャし、接続先ホストごとの送受信帯域を画面上にリアルタイム表示するツールです。CPU・メモリの状態を見る
top コマンドのネットワーク版と考えると分かりやすいでしょう。帯域の高い順に並び替えて表示されるため、「今どの通信が重いか」が一目でわかります。同じネットワーク監視ツールでも、用途が異なります。
| ツール | 監視の単位 | 主な用途 |
|---|---|---|
| iftop | 接続先ホスト(IP ペア) | どのホストとの通信が帯域を使っているか確認 |
| nethogs | プロセス | どのプロセスが帯域を消費しているか確認 |
| tcpdump | パケット | パケットの中身(ペイロード)を調査 |
| iperf3 | サーバー間スループット | サーバー間の最大帯域を計測 |
| ss / netstat | ソケット(接続状態) | 現在の接続一覧・LISTEN ポートを確認 |
iftop のインストール方法
iftop は多くのディストリビューションで標準リポジトリからインストールできます。1. RHEL 系(AlmaLinux / Rocky Linux / CentOS)
# RHEL 9 / AlmaLinux 9 / Rocky Linux 9 # EPEL リポジトリを有効化してからインストール # dnf install -y epel-release # dnf install -y iftop # RHEL 8 / CentOS Stream 8 も同様 # dnf install -y epel-release && dnf install -y iftop # インストール確認 # which iftop /usr/sbin/iftop
2. Ubuntu / Debian 系
# Ubuntu 22.04 / 24.04 # apt update && apt install -y iftop # インストール確認 # iftop --version iftop 1.0pre4
iftop の基本的な使い方
【注意】 iftop はパケットキャプチャを使うため、root(sudo)権限が必要です。一般ユーザーで実行すると「You don't have permission」エラーになります。1. 基本起動(デフォルトインターフェース)
# sudo iftop # インターフェースを明示指定する場合(推奨) # sudo iftop -i eth0 # AlmaLinux 9 / Rocky Linux 9 では NIC 名が異なる場合がある # ip a で確認してから指定する # ip a | grep -E 'eth|ens|enp' 3: ens3:
mtu 1500 qdisc mq state UP group default qlen 1000
# sudo iftop -i ens3 12.5Kb 25.0Kb 37.5Kb 50.0Kb 62.5Kb +-----------------+--------------+---------------+--------------+----------+ 192.168.10.5 => 203.0.113.22 3.21Kb 2.98Kb 3.01Kb <= 884b 920b 896b 192.168.10.5 => 198.51.100.8 2.10Kb 1.95Kb 2.00Kb <= 512b 488b 500b 192.168.10.5 => 10.0.0.1 68b 64b 65b <= 64b 64b 64b -------------------------------------------------------------------- TX: cumm: 3.82KB peak: 4.12KB rates: 5.39Kb 4.97Kb 5.01Kb RX: cumm: 1.46KB peak: 1.70KB rates: 1.46Kb 1.47Kb 1.46Kb TOTAL: cumm: 5.28KB peak: 5.82KB rates: 6.85Kb 6.44Kb 6.47Kb
・
=>(右向き矢印):送信方向(TX)の帯域・
<=(左向き矢印):受信方向(RX)の帯域・右側の数値 3 列:直近 2 秒・10 秒・40 秒の平均帯域
・TX / RX / TOTAL 行:全体の集計(cumm = 累計、peak = 最大、rates = 平均)
2. 主なオプション一覧
| やりたいこと | コマンド |
|---|---|
| インターフェースを指定して起動 | sudo iftop -i ens3 |
| IP アドレスをホスト名に逆引きしない(高速) | sudo iftop -n |
| ポート番号も表示する | sudo iftop -P |
| 特定 IP とのみの通信を絞り込む(BPF フィルタ) | sudo iftop -f "host 203.0.113.22" |
| 特定ポートのみ絞り込む | sudo iftop -f "port 443" |
| 非対話(バッチ)モードで一定時間後に終了 | sudo iftop -t -s 10 |
3. 起動中のキー操作
iftop は起動中にキーボード操作で表示を変更できます。・
h:ヘルプ表示・
n:IP アドレス ↔ ホスト名の切り替え・
p:ポート番号の表示・非表示切り替え・
s:送信元(source)表示の切り替え・
d:宛先(destination)表示の切り替え・
t:送受信の合計・送信のみ・受信のみの切り替え・
1 / 2 / 3:2 秒・10 秒・40 秒の帯域でソート・
P:一時停止(再押しで再開)・
q:終了応用・実務 Tips
1. BPF フィルタで特定通信だけを絞り込む
「特定の IP と何 Mbps やり取りしているか」を見たい場合は、BPF フィルタ(tcpdump と同じ構文)が使えます。# 特定のホスト(IP アドレス)とのみの通信を表示 # sudo iftop -i ens3 -f "host 203.0.113.22" # 特定のポートのみ表示(HTTPS = 443) # sudo iftop -i ens3 -f "port 443" # 特定のネットワーク範囲との通信を表示 # sudo iftop -i ens3 -f "net 10.0.0.0/8" # AND/OR の組み合わせ # sudo iftop -i ens3 -f "host 203.0.113.22 and port 443"
2. バッチモードでログに記録する
cron や自動調査スクリプトで使う場合は、対話なしのバッチモード(-t)が便利です。# 10 秒間だけキャプチャして標準出力に結果を出す # sudo iftop -t -s 10 -i ens3 # ファイルに保存する場合 # sudo iftop -t -s 10 -i ens3 2>/dev/null | tee /tmp/iftop_$(date +%Y%m%d%H%M).log # 出力例(バッチモード) # =================================================================== # Host name (port/service if enabled) last 2s last 10s last 40s cumulative # ------------------------------------------------------------------- # 1 192.168.10.5 => 3.21Kb 2.98Kb 3.01Kb 2.89KB # 203.0.113.22 <= 884b 920b 896b 9.13KB
3. iftop と nethogs を組み合わせた切り分け手順
ネットワークが重い時の実務的な切り分けフローは次のとおりです。・まず
iftop で「どの宛先 IP との通信が帯域を使っているか」を特定する・次に
nethogs で「どのプロセスが通信しているか」を確認する・最後に
ss -tnp で「そのプロセスがどの接続を張っているか」を確認する# Step 1: iftop で帯域を食っているホスト IP を特定 # sudo iftop -i ens3 -n # Step 2: nethogs で帯域を食っているプロセスを特定 # sudo nethogs ens3 # Step 3: ss でそのプロセスの接続を確認(PID=1234 の場合) # ss -tnp | grep 1234 ESTAB 0 0 192.168.10.5:52888 203.0.113.22:443 users:(("rsync",pid=1234,fd=5))
トラブルシュート・よくあるエラー対処
【重要】「listening on ... in promiscuous mode」が出る場合
iftop はプロミスキャスモード(自分宛てでないパケットもキャプチャする動作)で動作することがあります。これは正常動作ですが、SELinux が有効な環境では拒否されてキャプチャが部分的になる場合があります。# SELinux のアクセス拒否ログを確認 # ausearch -m avc -ts recent | grep iftop # 拒否されている場合は audit2allow でポリシーを作成するか、 # SELinux を Permissive モードにして動作確認する(本番環境では推奨しない) # setenforce 0 # 一時的に Permissive に(再起動で元に戻る)
「command not found」が出た場合
# RHEL 系では EPEL リポジトリが必要 # dnf repolist | grep epel epel Extra Packages for Enterprise Linux 9 - x86_64 # EPEL が見つからない場合はリポジトリを追加 # dnf install -y epel-release # dnf install -y iftop
「iftop: error while loading shared libraries」が出た場合
# 依存ライブラリを確認 # ldd $(which iftop) | grep "not found" libpcap.so.1 => not found # libpcap が不足している場合 # dnf install -y libpcap # RHEL 系 # apt install -y libpcap0.8 # Ubuntu 系
「The interface doesn't support capture」が出た場合
コンテナ(Docker / Podman)の内側や一部の仮想 NIC では、パケットキャプチャをサポートしていないことがあります。この場合は、ホスト側の NIC を指定して実行してください。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| デフォルト NIC でリアルタイム監視 | sudo iftop |
| インターフェースを指定して起動 | sudo iftop -i ens3 |
| ホスト名の逆引きなしで高速表示 | sudo iftop -n |
| ポート番号も合わせて表示 | sudo iftop -P |
| 特定ホストとの通信だけ絞り込む | sudo iftop -f "host 203.0.113.22" |
| 特定ポートの通信だけ絞り込む | sudo iftop -f "port 443" |
| バッチモードで 10 秒分だけ記録 | sudo iftop -t -s 10 |
ネットワーク帯域の調査を自動化したい場合は、バッチモードと cron を組み合わせる方法も有効です。cronの定期実行については ntpd 時刻同期設定 と同様、環境変数の設定が重要になるため、cronの基本をしっかり押さえておきましょう。
ネットワーク障害の切り分けを最短で終わらせるには、ツールの使い方より「調査の型」が大事です
iftop でトラフィックの発生源は掴めても、「なぜその通信が発生しているか」「どのプロセスが原因か」「設定を変えてよいか」を素早く判断するには、Linuxサーバー運用の基礎設計を身につけていることが前提になります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:シェルスクリプトでバックアップ自動化を作る実践|cronとログ設計まで
- 前のページへ:expectコマンドでLinuxの対話型処理を自動化する方法|パスワード入力・SSHログイン・telnetの自動操作実践例
- この記事の属するカテゴリ:Linuxtips・ネットワーク管理コマンドへ戻る

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