文件描述符数量限制

Raf*_*del 48 linux file-descriptors ulimit

我正在尝试安装389-ds,它给了我这个警告:

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

我了解文件描述符,但我不了解软限制和硬限制。

当我跑cat /proc/sys/fs/file-max,我回来590432。这应该意味着我最多可以打开 590432 个文件(即最多有 590432 个文件描述符。

但是当我运行时ulimit,它给了我不同的结果:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024
Run Code Online (Sandbox Code Playgroud)

但是硬/软限制来自ulimit什么,它们与存储在的数字有什么关系/proc/sys/fs/file-max

Ale*_*ios 47

根据内核文档/proc/sys/fs/file-max是内核在阻塞之前将分配的文件描述符的最大、总、全局数量。这是内核的限制,而不是您当前用户的限制。所以你可以打开 590432,只要你一个人在空闲系统上(单用户模式,没有守护进程运行)。

请注意,文档已过时:该文件已存在/proc/sys/fs/file-max很长时间。感谢 Martin Jambon 指出这一点。

软限制和硬限制之间的区别在 SE 上回答。您可以作为普通用户提高或降低软限制,前提是您不超过硬限制。您还可以降低硬限制(但您不能为该过程再次提高它)。作为超级用户,您可以提高和降低硬限制和软限制。双限制方案用于强制执行系统策略,但也允许普通用户为自己设置临时限制并在以后更改它们。

请注意,如果您尝试将硬限制降低到软限制以下(并且您不是超级用户),您将EINVAL返回(无效参数)。

因此,在您的特定情况下,ulimit(与 相同ulimit -Sf)表示您对 shell 及其子进程写入的文件大小没有软限制。(在大多数情况下这可能是个好主意)

您的其他调用,ulimit -Hn在报告-n限值(打开的文件描述符的最大数量),没有-f限制,这就是为什么软限制似乎比硬限制高。如果您输入,ulimit -Hf您还将获得unlimited.

  • 在 Linux 4.4.0 上,file-max 路径是`/proc/sys/fs/file-max`。 (14认同)
  • @Webman:不,不是。`ulimit` 只影响当前 *process* 的限制。当前进程的限制也遗留给子进程,但每个进程都有一个单独的计数。例如,使用`ulimit -Hn 10`,您一次只能打开10 个文件描述符。您创建的每个子进程也最多只能有 10 个文件描述符。一旦设置,只有超级用户可以增加限制。如果您设置的太低,您唯一的选择可能是终止您的 shell 进程并启动一个新的进程。 (2认同)