web-dev-qa-db-ja.com

Linuxで帯域幅の大部分を使用しているアプリケーションを見つける方法はありますか?

各プロセスが使用している帯域幅の量を示すことができるユーティリティを探しています。リストをconkyに送りたいので、データを印刷して終了します。

57
vava

NetHogs を試すことができます。

NetHogsは小さな「ネットトップ」ツールです。ほとんどのツールが行うように、プロトコルごとまたはサブネットごとにトラフィックを分割する代わりに、プロセスごとに帯域幅をグループ化します。 NetHogsは、特別なカーネルモジュールのロードに依存していません。突然大量のネットワークトラフィックが発生した場合は、NetHogsを起動して、どのPIDがこれを引き起こしているかをすぐに確認できます。これにより、ワイルドになり、突然帯域幅を占有しているプログラムを簡単に特定できます。

NetHogs_Screenshot

71
Milde

かなりの数がリストされています here

ただし、私のお気に入りは iftop および tcpdump のままです。 Wireshark も非常に優れたオプションです。

6
BinaryMisfit

atopを試してください...最大限に活用するには、追加のカーネルパッチ(I/Oアカウンティングパッチ)を有効にする必要がある場合があります。

atopがオプションではない場合は、netstat -anp --inetを(ルートとして)使用して、どのTCP/UDPポートがどのプロセスで使用されているか(または、おそらくlsof forそれ)。そこから、オープンソケットを取得した各プロセスを反復処理し、ltrace -Sまたはstraceを使用してそれに接続し、読み取り、書き込み、送受信、またはtcpdumpを使用します。リストにあるローカルIPアドレスとTCP/UDPポートを指定するフィルターを使用します。

atopは、これらの中で最も便利です。必要なカーネルサポートがインストールされている場合。過去には、atopを使用したI/Oプロファイリングをサポートすることのみを目的として、顧客や雇用主に特別なシステム(本番イメージとは異なる)をセットアップしてもらいました。ただし、これらの他の手法を使用すると、そこに到達できます。

SystemTapを使用して何かを行うこともできると確信していますが、これを行うための簡単な事前調理レシピは知りません。 SystemTapは非常にプログラミング分析ツールです。

5
Jim Dennis