2026年5月30日

2026年5月30日

nethogsでプロセス別のネットワーク使用量を確認する方法(Linux)

サーバーの通信量が急に増えたとき、iftop や nload ではインターフェースや接続先ごとの量はわかっても、「どのプロセスが使っているか」まではわかりません。nethogs は、通信量をプロセスごとにまとめて表示するコマンドで、帯域を使っているプログラムをすぐに特定できます。

この記事のオプションは、2026年10月時点の Debian のマニュアル(nethogs 0.9 系)に基づいています。ディストリビューションによっては古い版(0.8 系)が入っており、一部のオプションが使えないことがあります。手元の版で使えるオプションは nethogs -h で確認してください。

インストール

# Debian / Ubuntu
sudo apt update
sudo apt install nethogs

# RHEL 系(Rocky Linux / AlmaLinux など)は EPEL リポジトリから
sudo dnf install epel-release
sudo dnf install nethogs

RHEL 本体で EPEL を有効にする手順は、Rocky Linux や AlmaLinux と異なります。EPEL の公式ドキュメントを参照してください。

基本の使い方

nethogs はパケットを取得するため、root 権限で実行します。

# 動作中のすべてのインターフェース(ループバックを除く)を対象にする
sudo nethogs

# インターフェースを指定する(複数並べてもよい)
sudo nethogs eth0
sudo nethogs eth0 eth1

インターフェース名は環境によって eth0 ではなく ens3 や enp1s0 などになります。次のコマンドで確認してください。

ip -br link

画面の読み方

起動すると、次のような一覧が1秒ごとに更新されます(値は例です)。

    PID USER     PROGRAM                      DEV        SENT      RECEIVED
   1532 www-data /usr/sbin/php-fpm8.3         eth0      12.345     310.220 KB/sec
    988 root     /usr/sbin/sshd: admin@pts/0  eth0       0.512       0.180 KB/sec
      ? root     unknown TCP                              0.000       0.000 KB/sec

  TOTAL                                                  12.857     310.400 KB/sec
列 意味
PID プロセスID
USER プロセスの実行ユーザー
PROGRAM プログラムのパス(接続先が表示されることもある)
DEV 通信しているインターフェース
SENT / RECEIVED 送信量 / 受信量(既定は KB/秒)

unknown TCP は、どのプロセスの通信かを特定できなかった分です。短時間で終わった接続などが含まれます。

実行中に使えるキー

キー 動作
q 終了
s 送信量の多い順に並べる
r 受信量の多い順に並べる
m 表示単位を切り替える(KB/秒・合計 KB・合計 B・合計 MB など)
l コマンドライン全体を表示する(対応している版のみ)
b プログラム名だけを表示する(対応している版のみ)

「今どれだけ使っているか」は速度の表示(KB/秒)で、「起動してから合計でどれだけ使ったか」は m で合計表示に切り替えて確認します。

主なオプション

オプション 意味
-d 秒 更新間隔(既定は1秒)
-v 数字 表示単位(0=KB/秒、1=合計KB、2=合計バイト、3=合計MB、4=MB/秒、5=GB/秒)
-t トレースモード(画面を使わず、テキストで出力し続ける)
-c 回数 指定した回数だけ更新して終了する(既定は0=無制限)
-a ループバックや停止中のものも含め、すべてのデバイスを対象にする
-s 送信量で並べる
-C TCP に加えて UDP も数える
-P PID 指定した PID のプロセスだけを表示する
-l コマンドライン全体を表示する
-p プロミスキャスモードで取得する(通常は不要。公式にも非推奨)

-C・-P・-l は新しい版で追加されたオプションです。既定では TCP の通信だけが数えられるので、DNS など UDP の通信も見たい場合は、-C が使える版で指定してください。

# 5秒間隔で、合計 MB 表示にする
sudo nethogs -d 5 -v 3 eth0

# UDP も含めて表示する
sudo nethogs -C eth0

# PID 1532 のプロセスだけを見る
sudo nethogs -P 1532

記録を残す(トレースモード)

障害の調査で、一定時間の様子をファイルに残したいときは、トレースモード -t と回数 -c を組み合わせます。

# 5秒間隔で12回(約1分)記録してファイルに保存する
sudo nethogs -t -d 5 -c 12 eth0 > /tmp/nethogs-$(date +%Y%m%d-%H%M%S).txt

トレースモードでは、更新のたびに Refreshing: の行が出て、そのあとに「プログラム/PID/UID」「送信」「受信」がタブ区切りで1行ずつ出力されます。あとから grep でプログラム名を検索したり、表計算ソフトに読み込んだりできます。

root以外のユーザーで実行する

マニュアルでは、root 以外で動かすためにケーパビリティを付ける方法が案内されています。パケットの取得に cap_net_admin と cap_net_raw、プロセス名の表示に cap_dac_read_search と cap_sys_ptrace が必要です。

sudo setcap "cap_net_admin,cap_net_raw,cap_dac_read_search,cap_sys_ptrace+pe" "$(command -v nethogs)"
getcap "$(command -v nethogs)"

この設定をすると、そのサーバーのすべてのユーザーが nethogs で他人のプロセスの通信量を見られるようになります。共用のサーバーでは付けず、sudo で実行する運用にしてください。パッケージを更新するとケーパビリティが外れることがあります。

原因のプロセスがわかったあとに

  • ss -tunp を実行すると、そのプロセスがどの相手と接続しているかを確認できます(例: sudo ss -tunp | grep php-fpm)。
  • ウェブサーバーのプロセス(php-fpm・nginx・apache2 など)の送信量が多い場合は、アクセスログで大量にリクエストしている IP アドレスやダウンロードされているファイルを確認します。
  • 見覚えのないプログラムが大量に送信している場合は、不正なプログラムが動いている可能性があります。プロセスの実行ファイルの場所(ls -l /proc/PID/exe)を確認し、サーバーの調査を行ってください。

関連記事:

まとめ

  • sudo nethogs または sudo nethogs インターフェース名 で、プロセスごとの送信量・受信量をリアルタイムで確認できます。
  • 実行中は s・r で並べ替え、m で合計表示に切り替えます。更新間隔は -d、表示単位は -v で指定します。
  • 記録を残すときは -t と -c を使い、UDP も見たいときは -C、特定のプロセスだけ見たいときは -P を使います(版によっては未対応)。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲