web-dev-qa-db-ja.com

発信トラフィックの発信プロセスを決定する

私のサーバーが大量のトラフィックを送信していることがわかります。 netstat -apln | grep httpdすべてのトラフィックが1つのIPに向かうことがわかります。

そのIPにデータを送信するために使用されているスクリプト/ファイルを確認する方法はありますか?それとも一般的なIPですか?

私はtcpdumpがパケットを見ることができることを知っていますが、これを行う方法のようには思えません。

9
user2078802

netstatコマンドは、現在開いている接続のみを通知できますが、それぞれが送受信したトラフィックの量は通知できません。ほとんどのデータを転送している接続を特定するには、iftoptcpdumpなどの他のツールを使用する必要があります。

次に何をするかは、各接続の存続期間と、どちらの端が接続を確立したかに大きく依存します。目的がサーバーの場合は、サーバープロセスに属するリスニングソケットを識別できるはずです。

それが実際にhttpdプロセスである場合は(質問で示唆しているように)、Webサーバーのアクセスログを確認する場所です。留意すべき1つの注意点は、各要求は、その要求の転送が完了した後にのみログに記録されることです。サイズが数MBのファイルを提供する場合、これは大きな違いを生む可能性があります。

エンドがたまたまクライアントである場合、リスニングソケットは表示されませんが、接続が長命である場合は、netstatを使用して、接続と対応するプロセスを見つけることができます。帯域幅を消費しています。

上記の調査の結果、ほとんどのトラフィックがエンドから確立された短期間の接続で発生していることが判明した場合、netstatでは、原因となっているプロセスを特定するのに十分ではありません。その特定のシナリオは 古い質問 でカバーされています。

4
kasperd

lsofを使用して、ネットワーク接続を使用しているプロセスを確認することができます。

すべてのネットワーク接続を一覧表示:lsof -i

すべてのTCPまたはUDP接続をリストします:lsof -i tcp; lsof -i udp;

特定のポートでリッスンするプロセス:lsof -i :80

プロセスで使用されているネットワークファイルのリスト:lsof -i -a -p 234

Sshで始まるプロセスによって開かれたネットワークファイルをリストします:lsof -i -a -c ssh

2
b13n1u

nethogs プロセスごとに使用される帯域幅をレポートし、毎秒1回更新されます。

2
Andrew Schulman

netstat -nlpt(Sudoまたはrootとして実行する必要があります)は、接続を担当するプロセスのpid/nameを返します。あなたはIPを知っているので、あなたは簡単に行うことができるはずです

Sudo netstat -nlpt | grep xx.xx.xx.xx

それがどのプロセスかを確認します。私のスキルはWindowsの方が多いので、構文が少しずれている可能性があります。 Linuxのスイッチを調べたところ、これは#5 here でした。

1
JoelAZ

これは興味深い質問でした。カーネルはデフォルトでプロセスごとのネットワークスループット使用率のカウンターを格納しないようですが、カーネルモジュールnetatop [1]がこの機能を追加し、atop [を使用したロギングとレポートに使用できるようにします。 2]。


[1]:参照 http://www.atoptool.nl/netatop.php
[2]:参照 http://www.atoptool.nl/

0
DTK