オープンファイルの制限が十分に高いにもかかわらず、オープンファイルが多すぎます。

オープンファイルの制限が十分に高いにもかかわらず、オープンファイルが多すぎます。

定期的にファイル数を数えて開くデーモンを実行しています。また、これらのファイルのデータをネットワーク経由でさまざまなクラウドプロバイダにコピーします。デーモンは単一のプロセスで実行されます。プロセスの開始後に開かれたファイルの制限を、システムのデフォルト値である1024から32768に増やしましたprlimit --pid <the process id> --nofile=32768:32768。ハードファイルとソフトファイルの制限が実際に更新されたことを確認しました。

ノートlsof:現在開いているファイルを参照しているのは、別のウィンドウ()で引き続き実行され、返される値を指すことですwhile [ true ]; do sudo lsof -p <the process id> | wc -l; done;。これは単なる推測ではありません。

サーバーはしばらく問題なく実行され、負荷が激しい場合でも3500個未満のファイルが開いていました。ただし、通常、ロードで数百個のファイルしか開いていない場合(500個未満)、プロセスでソケットの作成、ファイルのオープン、ファイル数の計算などを試みると、「開いたファイルが多すぎます」というエラーが発生し始めます。

ソフト制限が32768であり、実際には何百ものファイルのみが開いているとマークされていても、「開いているファイルが多すぎます」を引き起こす可能性があるとは思わない他の変数/制限はありますか?

関連情報:

  • Red Hat Enterprise Linux Server 7.6
  • カーネル 3.10.0-957.el7.x86_64 (古いことがわかっています。制御できません。)

完全に明確に言えば、カーネルの自己記録(を通じてlsof)によると、プロセスは開かれたファイルをあまり使用しません。これらのエラーが発生し始めると、カーネルは何百もの開かれたファイル記述子のみを報告します(プロセス制限は32768です)。

ベストアンサー1

なぜこれが起こるのかわかりませんが、私が最初にすることはデーモンが始まる前にulimitを設定する

おすすめ記事