在Linux上,当进程打开文件时,操作系统将检查最大打开文件限制。
如果限制是1024,这个数字是什么意思?
它代表了吗?
- 进程打开的文件数
- 拥有该进程的用户打开的文件数
- 当前OS中所有已打开文件的数量?
在Linux上,当进程打开文件时,操作系统将检查最大打开文件限制。
如果限制是1024,这个数字是什么意思?
它代表了吗?
您可以通过以下方式检查系统的软限制和硬限制 ulimit -a
命令。
软限制可以由任何用户设置,而硬限制只能由root更改。限制是a的属性 处理。创建子进程时会继承它们,因此应在init脚本的系统初始化期间设置系统范围的限制,并且应在用户登录期间设置用户限制,例如使用 pam_limits
。
机器启动时经常会设置默认值。因此,即使您可能在单个shell中重置ulimit,您可能会发现它在重新引导时重置为先前的值。如果要更改默认值,可能需要为启动ulimit命令grep启动脚本。
如果限制为1024,则表示您/进程可以打开最多1024个文件。如果你超过这个限制意味着 open
, pipe
和 dup
系统调用将失败:
RLIMIT_NOFILE:
指定的值大于此进程可以打开的最大文件描述符编号。尝试(
open(2)
,pipe(2)
,dup(2)
等)超过此限制会产生错误EMFILE
。
您可以通过以下方式检查系统的软限制和硬限制 ulimit -a
命令。
软限制可以由任何用户设置,而硬限制只能由root更改。限制是a的属性 处理。创建子进程时会继承它们,因此应在init脚本的系统初始化期间设置系统范围的限制,并且应在用户登录期间设置用户限制,例如使用 pam_limits
。
机器启动时经常会设置默认值。因此,即使您可能在单个shell中重置ulimit,您可能会发现它在重新引导时重置为先前的值。如果要更改默认值,可能需要为启动ulimit命令grep启动脚本。
如果限制为1024,则表示您/进程可以打开最多1024个文件。如果你超过这个限制意味着 open
, pipe
和 dup
系统调用将失败:
RLIMIT_NOFILE:
指定的值大于此进程可以打开的最大文件描述符编号。尝试(
open(2)
,pipe(2)
,dup(2)
等)超过此限制会产生错误EMFILE
。
它是一些打开的文件 描述 每个过程。它们都可以引用相同的文件或不同的文件。
你可以看到当前的限制 ulimit -a
在shell中,或以编程方式 getrlimit
。系统范围限制设置为 /etc/security/limits.conf
。
Linux上的文件系统对象模型是:
file descriptor -> file description -> dentry -> inode
dup
为同一文件描述创建一个新的文件描述符。
open
创建新的文件描述符和文件描述。
据我所知,它意味着打开文件的最大数量(描述符) 每个用户。
编辑: 实际上,limits.conf为每个用户设置了这个值:
* hard nofile 1024
这意味着一个硬性限制 所有 用户(每个用户都是)
或者可以像这样设置:
myuser hard nofile 1024
这意味着用户的1024限制 为myuser