ファイル記述子の数の制限


34

私はインストールしようとし389-dsています、そしてそれは私にこの警告を与えます:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

ファイル記述子については理解していますが、ソフト制限とハード制限についてはわかりません。

走るcat /proc/sys/fs/file-maxと戻ってき590432ます。これは、最大590432個のファイルを開くことができることを意味します(つまり、最大590432個のファイル記述子があります)。

しかし、実行するとulimit、異なる結果が得られます。

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

しかし、ハード/ソフト制限ulimit/proc/sys/fs/file-max何ですか?また、保存された数とどのように関係していますか?

回答:


39

カーネルのドキュメントによると、/proc/sys/file-maxは、チョークがチョークする前にカーネルが割り当てるファイル記述子の最大の総数です。これはカーネルの制限であり、現在のユーザーの制限ではありません。そのため、アイドル状態のシステム(シングルユーザーモード、デーモンが実行されていない状態)にいる場合は、590432 開くことができます。

ドキュメントは古いことに注意してくださいproc/sys/fs/file-max。ファイルは長い間使用されています。これを指摘してくれたMartin Jambonに感謝します。

ソフト制限とハード制限の違いについては、SEで回答しています。ハード制限を超えない限り、通常のユーザーとしてソフト制限を増減できます。また、ハードリミットを下げることもできます(ただし、そのプロセスで再び上げることはできません)。スーパーユーザーは、ハード制限とソフト制限の両方を上下できます。デュアルリミットスキームは、システムポリシーを適用するために使用されますが、通常のユーザーが自分自身に一時的な制限を設定し、後で変更することもできます。

ハード制限をソフト制限より低くしようとすると(そしてスーパーユーザーではない場合)、EINVAL戻ってくる(無効な引数)ことに注意してください。

そのため、特定のケースではulimit(これはulimit -Sf)と同じですが、シェルとそのサブプロセスによって書き込まれるファイルサイズにソフト制限はありません。(ほとんどの場合、それはおそらく良い考えです)

あなたの他の呼び出し、ulimit -Hn上のレポート-n制限(オープンファイル記述子の最大数)、ない-fソフトリミットはハードリミットよりも高いと思われる理由で制限、。入力ulimit -Hfすると、「無制限」にもなります。


14
Linux 4.4.0では、file-maxパスは/proc/sys/fs/file-maxです。
マーティンジャンボン

ハード制限は、ulimit -Hn 割り当てられたファイル記述子機能に対するシステムのまさに制限を対象としていますか?
ウェブウーマン

2
@Webman:いいえ、ありません。ulimit現在のプロセスの制限にのみ影響します。現在のプロセスの制限は子プロセスにも残されていますが、各プロセスには個別のカウントがあります。たとえばulimit -Hn 10、を使用すると、一度に10個のファイル記述子のみを開くことができます。作成する各子プロセスも、最大10個のファイル記述子しか持つことができません。一度設定すると、スーパーユーザーのみが制限を引き上げることができます。設定が低すぎる場合は、シェルプロセスを強制終了して、新しいシェルプロセスを開始するしかありません。
アレクシオス

0

「選択」システムコールは、unixの多くのひどい脳死の設計決定の1つであり、windows95でさえも比較して見栄えがよくなります。

20年前に禁止されていたはずでしたが、今では問題なくファイルハンドラを無制限にできるようになっているかもしれません。

カーネル構成でファイル記述子の数を簡単に増やすことができ、ulimitですが、ライブラリが「select」システムコールを使用すると、プログラムが不安定になり(メモリ破損)、失敗することに注意してください。

Selectは、0から1023までのファイル記述子のみを処理できます。より高い値のファイル記述子をフィードすると、メモリー内でランダムに突くため、選択が機能するものとして記述子を繰り返すことはありません。残念ながら、多くのライブラリはselectを使用しています。


あなたのコメントは有用な警告ですが、不機嫌な口調をとる代わりに、 fd_set(3) manページをし、制限がから来FD_SETSIZEでした。そして、最高のような代替コールの提案であったであろうpoll(3)として、この中で、答えは
Davor Cubranic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.