RLIMIT_NOFILE を RLIM_INFINITY に設定できますか?

RLIMIT_NOFILE を RLIM_INFINITY に設定できますか?

setrlimit(C++ コード内から )を使用してを(次に&をに設定して )RLIMIT_NOFILEに設定しようとしましたが、「操作は許可されていません」というエラーが発生します。コードはルートとして実行されます。RLIM_INFINITYgetrlimitrlim_currlim_maxRLIM_INFINITYsetrlimit()

RLIM_INFINITYを設定することは可能ですかRLIMIT_NOFILE?

答え1

RLIMIT_NOFILEは で定義される最大値によって制限され/proc/sys/fs/nr_open、それより上に設定しようとすると になりますEPERM。短期間(カーネル 2.6.28 を使用)は に設定できましたRLIM_INFINITYが、一部のプログラムで大きなパフォーマンス上の問題が発生しました。元に戻すコミット詳細については。

これは文書化されている対応するEPERMエントリman setrlimit、 そして/proc/sys/fs/nr_openの説明man 5 proc

関連情報