【问题标题】:What is the max opened files limitation on Linux?Linux 上的最大打开文件限制是多少?
【发布时间】:2014-09-17 07:36:51
【问题描述】:

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

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

是否代表

  • 进程打开的文件数
  • 拥有该进程的用户打开的文件数
  • 目前操作系统中所有打开的文件个数?

【问题讨论】:

    标签: linux ulimit


    【解决方案1】:

    据我了解,这意味着每个用户打开文件(描述符)的最大数量。

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

    * hard nofile 1024
    

    这意味着对所有用户(所有用户都一样)的硬性限制

    或者可以这样设置:

    myuser hard nofile 1024
    

    这意味着用户 myuser

    的限制为 1024

    【讨论】:

    • 呃,不,这指定每个用户允许每个进程有多少个描述符。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 这并不能回答问题 - 无论是每个进程、每个用户还是每个系统。
    【解决方案3】:

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

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

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

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

    如果限制为 1024,则意味着您/进程最多可以打开 1024 个文件。如果超过此限制意味着openpipedup 系统调用将失败:

    RLIMIT_NOFILE:

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

    【讨论】:

    • ulimit -1 有什么作用?
    【解决方案4】:

    如果是linux,验证输出:

    ulimit -a
    

    它会告诉系统中打开文件的数量限制是多少,因为在 linux 中有一种方法可以限制打开文件的数量,并将打开文件的限制设置为无限制,这将解决问题。

    【讨论】:

      猜你喜欢
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      相关资源
      最近更新 更多