Debian サーバーで実行されていたプロセスが発生し始めました。ソケット:開いているファイルが多すぎます。間違い。その後、エラーデバッグを開始しました。私は次のシナリオを経験しました。
実行すると、lsof | grep 4300
次のように出力されます。
私が実行すると、lsof -i TCP:4300
出力は次のようになります。
今質問は次のとおりです。
2つの違いは何ですか? (私が観察したところ、最初にスレッドIDがあり、後者にスレッドIDがありません。)
最初の接続で同じ接続に複数の回線があるのはなぜですか? (SSは4行のみ提供しています。)
どのくらいのファイル記述子が開いていますか?
このシナリオをデバッグする方法は?
答え1
私は言及していますlsof マンページ私の答えのために。
lsof | grep 4300
オプションがない場合、lsof はすべてのアクティブ・プロセスに属するすべてのオープン・ファイルをリストします。
grep
したがって、このコマンドはすべてのプロセスに属するすべての開いているファイルをリストし、検索オペランド「4300」に一致するファイルのみを検索するようにパイプした出力です。
lsof -i TCP:4300
このオプションは、インターネットアドレスがiで指定されたアドレスと一致するファイルのリストを選択します。アドレスが指定されていない場合、このオプションはすべてのインターネットおよびx.25(HP-UX)ネットワークファイルのリストを選択します。
このコマンドを使用すると、インターネットアドレスまたはネットワークの場所を含むファイルのみをリストするように指定し、ポート4300でtcpプロトコルに一致するファイルのみをリストするように指定しました。
あなたの質問に答える
これら2つのコマンドの結果は異なります。最初のコマンドは開いているすべてのファイルを一覧表示しますが、出力はgrepによって「4300」を含むすべての行にフィルタリングされます。 2番目のコマンドは、ポート4300でTCPプロトコルを使用してインターネットまたはネットワークファイルのみを開くように指定します。
~によるとこの投稿プロセスでは、ファイルを複数回開くことができます。これは予期しない動作ではありません
lsof
。これは明らかにあなたの問題です。各プロセスが何をするのか、そしてこれらのファイルの複数のコピーを開く必要がある理由を調べてみましょう。コマンドのすべての出力が含まれている場合は、最初のコマンドと比較して各ファイルを5回開く3つのプロセスがあります。 2番目のコマンドには、ポート4300でTCPプロトコルを使用してネットワークファイルを開く3つのプロセスがあり、1つのプロセスはそのプロトコルとポートでリッスンします。
私はpidに基づいて各プロセスを調べます。参考資料この投稿次のコマンドを使用してpidでプロセスを見つけることができます
ps -p <PID> -o comm=
。あるいは、ps aux | grep <PID>
プロセスを把握するのに多くの成功を収めました。
結論として
ここで、これがプロセスの予想される動作であることを確認し、初期エラーの原因である場合は、それを解決する方法を見つける必要があります。エラーやプロセスに関連する可能性があるログを参照することを忘れないでください。
この回答について誤解や質問がある場合は、コメントを残してください。回答を改善するために、必要に応じてこの投稿を編集します。
頑張ってください!