Linux上最大打开文件数限制是多少?

19

在Linux上,当一个进程打开一个文件时,操作系统会检查最大打开文件数的限制。

如果限制为1024,这个数字代表什么?

它表示:

  • 进程打开的文件数量
  • 拥有该进程的用户打开的文件数量
  • 当前操作系统中所有打开文件的数量
3个回答

19
您可以通过ulimit -a命令检查系统的软限制和硬限制。
软限制只是当前实施的限制,而硬限制标记着不能通过设置软限制超过的最大值。
任何用户都可以设置软限制,而只有root用户才能更改硬限制。限制是进程的属性。当创建子进程时,它们会被继承,因此在系统初始化期间应该设置系统范围内的限制,例如使用init脚本,而在用户登录期间应该为用户设置限制,例如使用pam_limits。
通常在计算机启动时设置默认值。因此,即使您在单个shell中重置了ulimit,您可能会发现它在重新启动时恢复到上一个值。如果您想更改默认值,可以搜索引导脚本以查找ulimit命令的存在。
如果限制是1024,则表示您/进程最多可以打开1024个文件。如果超过此限制,则openpipedup系统调用将失败:

RLIMIT_NOFILE:

指定了可以由此进程打开的最大文件描述符号码加1的值。尝试(open(2)pipe(2)dup(2)等)超过此限制会得到错误EMFILE


1
ulimit -1是什么意思? - Blake

4

这是每个进程的已打开文件描述符数量。它们可以都指向同一个文件,也可以指向不同的文件。

您可以使用shell中的ulimit -a查看当前限制,或者使用getrlimit进行编程实现。系统范围的限制在/etc/security/limits.conf中设置。

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

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

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


这并没有回答问题——它是针对每个进程、每个用户还是整个系统的。 - Toby Speight

-1
如果是 Linux 系统,请验证以下输出:
ulimit -a

它将告诉您系统中打开文件数量的限制,因为在Linux中有一种方法可以限制打开文件的数量,并且还可以将打开文件的限制设置为无限制,从而解决该问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接