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を使います(版によっては未対応)。