web-dev-qa-db-ja.com

lsofとlsof-iの違いは何ですか

Debianサーバーで実行されている私のプロセスの1つがソケットをスローし始めました:開いているファイルが多すぎますエラー。次に、エラーのデバッグを開始しました。私は次のシナリオを経験しました。

私が走ったときlsof | grep 4300、出力は次のとおりです enter image description here

私が走ったときlsof -i TCP:4300、出力は

enter image description here

今の質問は次のとおりです。

  1. それらの両方の違いは何ですか? (私の観察では、最初のものにはスレッドIDがあり、後者にはスレッドIDがありません)

  2. 最初の接続に同じ接続に対して複数の回線があるのはなぜですか? (SSは4行のみを提供しています。)

  3. 開いているファイル記述子はいくつですか?

  4. このシナリオをデバッグする方法は?

2

私の答えは lsofのマンページ を参照しています。

lsof | grep 4300

オプションがない場合、lsofは、すべてのアクティブなプロセスに属するすべての開いているファイルを一覧表示します。

したがって、このコマンドはすべてのプロセスに属するすべての開いているファイルを一覧表示し、その出力をgrepにパイプして、検索オペランド「4300」に一致するファイルのみを検索します。

lsof -i TCP:4300 

このオプションは、インターネットアドレスがiで指定されたアドレスと一致するファイルのリストを選択します。アドレスが指定されていない場合、このオプションはすべてのインターネットおよびx.25(HP-UX)ネットワークファイルのリストを選択します。

このコマンドを使用して、インターネットアドレスまたはネットワークの場所を持つファイルのみを一覧表示するように指定し、さらに、ポート4300のtcpプロトコルに一致するファイルのみを一覧表示するように指定しました。

あなたの質問に答える

  1. 2つのコマンドの結果は、最初のコマンドが開いているすべてのファイルを一覧表示するという点で異なりますが、出力は「4300」を持つすべての行にgrepによってフィルター処理されます。 2番目のコマンドは、ポート4300でtcpプロトコルを使用しているインターネットまたはネットワークファイルを開くことだけを指定します。

  2. この投稿 によると、プロセスでファイルを複数回開くことができます。これはlsofの予期しない動作ではありません。それは間違いなくあなたの問題であり、私はそれらの各プロセスが何をしているのか、そしてなぜそれらのファイルのいくつかのコピーを開く必要があるのか​​を調べます。

  3. 最初のコマンドよりもコマンドのすべての出力を含めた場合、それぞれのファイルを5回開く3つのプロセスがあります。 2番目のコマンドには、ポート4300でtcpプロトコルを使用してネットワークファイルを開いている3つのプロセスと、そのプロトコルとポートをリッスンしているプロセスがあります。

  4. 私は、各プロセスがpidに基づいているものを調べます。参照 この投稿 次のコマンドを使用してpidでプロセスを検索できます:ps -p <PID> -o comm=。あるいは、プロセスを特定するためにps aux | grep <PID>で多くの成功を収めました。

結論

ここから、それがプロセスの予想される動作であるかどうか、およびそれらが初期エラーの原因である場合にそれを修正する方法を調べる必要があります。エラーとプロセスが関連付けられている可能性のあるログを参照することを忘れないでください。

この回答について誤解や質問がある場合は、コメントしてください。回答を改善するために、必要に応じてこの投稿を編集します。

幸運を祈ります!

1
kemotep