1. ホーム
  2. c

[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"

2022-03-15 10:29:44

質問

私は学校のプロジェクトでマルチスレッドサーバーを作成する必要があり、現在、apacheに対していくつかのテストを実行することによって、それを比較しているところです。私はそれを助けるためにautobenchを使用していますが、いくつかのテストを実行した後、または接続を行うためにあまりにも高いレート(約600以上)を与えると、私は"Too many open files"エラーが発生します。

リクエストの処理が終わった後、私はいつも close() をソケット上で実行します。私はこれまで shutdown() 関数もありますが、何も解決しないようです。何か良い方法はないでしょうか?

解決方法を教えてください。

Linuxでは、開くことのできるファイルディスクリプタの数に制限を設けることができる場所が複数存在します。

以下を確認することができます。

cat /proc/sys/fs/file-max

これで、ファイルディスクリプタのシステム全体の上限がわかります。

シェルレベルでは、個人的な上限が表示されます。

ulimit -n

これは /etc/security/limits.conf で変更できます - nofile パラメータです。

しかし、ソケットを正しく閉じていれば、同時接続を大量に開けない限り、この現象は発生しないはずです。 何かが、ソケットが適切に閉じられるのを妨げているようです。 ソケットが適切に処理されていることを確認します。