问题 Linux上的最大打开文件限制是多少?


在Linux上,当进程打开文件时,操作系统将检查最大打开文件限制。

如果限制是1024,这个数字是什么意思?

它代表了吗?

  • 进程打开的文件数
  • 拥有该进程的用户打开的文件数
  • 当前OS中所有已打开文件的数量?

6369
2017-07-25 12:29


起源



答案:


您可以通过以下方式检查系统的软限制和硬限制 ulimit -a 命令。

  1. 软限制只是当前强制限制。
  2. 硬限制标记设置软限制不能超过的最大值。

软限制可以由任何用户设置,而硬限制只能由root更改。限制是a的属性 处理。创建子进程时会继承它们,因此应在init脚本的系统初始化期间设置系统范围的限制,并且应在用户登录期间设置用户限制,例如使用 pam_limits

机器启动时经常会设置默认值。因此,即使您可能在单个shell中重置ulimit,您可能会发现它在重新引导时重置为先前的值。如果要更改默认值,可能需要为启动ulimit命令grep启动脚本。

如果限制为1024,则表示您/进程可以打开最多1024个文件。如果你超过这个限制意味着 openpipe 和 dup 系统调用将失败:

RLIMIT_NOFILE:

指定的值大于此进程可以打开的最大文件描述符编号。尝试(open(2)pipe(2)dup(2)等)超过此限制会产生错误 EMFILE


9
2017-07-25 13:32



-1的ulimit是做什么的? - Blake


答案:


您可以通过以下方式检查系统的软限制和硬限制 ulimit -a 命令。

  1. 软限制只是当前强制限制。
  2. 硬限制标记设置软限制不能超过的最大值。

软限制可以由任何用户设置,而硬限制只能由root更改。限制是a的属性 处理。创建子进程时会继承它们,因此应在init脚本的系统初始化期间设置系统范围的限制,并且应在用户登录期间设置用户限制,例如使用 pam_limits

机器启动时经常会设置默认值。因此,即使您可能在单个shell中重置ulimit,您可能会发现它在重新引导时重置为先前的值。如果要更改默认值,可能需要为启动ulimit命令grep启动脚本。

如果限制为1024,则表示您/进程可以打开最多1024个文件。如果你超过这个限制意味着 openpipe 和 dup 系统调用将失败:

RLIMIT_NOFILE:

指定的值大于此进程可以打开的最大文件描述符编号。尝试(open(2)pipe(2)dup(2)等)超过此限制会产生错误 EMFILE


9
2017-07-25 13:32



-1的ulimit是做什么的? - Blake


它是一些打开的文件 描述  每个过程。它们都可以引用相同的文件或不同的文件。

你可以看到当前的限制 ulimit -a 在shell中,或以编程方式 getrlimit。系统范围限制设置为 /etc/security/limits.conf

Linux上的文件系统对象模型是:

file descriptor -> file description -> dentry -> inode
  1. 文件描述符 是应用程序使用的整数。
  2. 文件描述 是一个或多个内核数据结构 文件描述符 参考。
  3. 目录项 是文件名。一个文件可以有多个名称(硬链接)。
  4. 索引节点 是文件内容。

dup 为同一文件描述创建一个新的文件描述符。 open 创建新的文件描述符和文件描述。


1
2017-07-25 12:55



这不能回答这个问题 - 无论是每个进程,每个用户还是每个系统。 - Toby Speight


据我所知,它意味着打开文件的最大数量(描述符) 每个用户

编辑: 实际上,limits.conf为每个用户设置了这个值:

* hard nofile 1024

这意味着一个硬性限制 所有 用户(每个用户都是)

或者可以像这样设置:

myuser hard nofile 1024

这意味着用户的1024限制 为myuser


0
2017-07-25 12:50



呃,不,这指定了多少描述符 每个过程 允许每个用户。 - Toby Speight