【问题标题】:Difference between Linux errno 23 and Linux errno 24Linux errno 23 和 Linux errno 24 的区别
【发布时间】:2014-09-11 19:39:06
【问题描述】:
  1. errno.h 中的这两个 linux 错误有什么区别? 23和24

    我尝试了 2 个不同的网站,但无法理解两者之间的区别。


    [EMFILE]
    Too many open files.
    [ENFILE]
    Too many files open in system.
    

    # define ENFILE      23  /* File table overflow */
    # define EMFILE      24  /* Too many open files */
    

  2. 另外,我在第 974 次收到 errno 24 和套接字调用失败。 (AF_INETUDP 数据报套接字)

    当我执行cat /proc/sys/fs/file-max 时,我看到的值为 334076 ulimit -n 显示 1024

    知道可以做些什么来增加限制吗?

【问题讨论】:

    标签: c linux sockets error-code errno


    【解决方案1】:

    对于 1) 这两个错误代码都是关于打开文件太多的情况。 EMFILE 是您的进程中打开的文件过多。 ENFILE是整个系统中打开的文件太多。

    【讨论】:

    • 感谢 wojtek。对于 EMFILE 错误,你知道我可以在哪里设置进程可以打开的文件的最大限制吗?
    • 我看到 /proc/sys/fs/file-max 的值为 334076
    【解决方案2】:

    您可以增加打开文件/文件描述符的最大数量

    sysctl -w fs.file-max=100000
    

    或者打开

    /etc/sysctl.conf
    

    并将 fs.file-max 追加/更改为您需要的数字:

    fs.file-max = 100000
    

    然后运行

    sysctl -p
    

    重新加载新设置

    如果您不想设置系统范围的 FD(文件描述符)限制,您可以设置用户级 FD 限制。

    您需要编辑 /etc/security/limits.conf file

    对于用户 YOUR_USER,添加以下行:

    YOUR_USER soft nofile 4096
    YOUR_USER hard nofile 10240
    

    为用户 YOUR_USER 设置软限制和硬限制。
    保存并关闭文件。

    查看用户 YOUR_USER 的硬限制和软限制:

    su - YOUR_USER
    
    ulimit -Hn
    ulimit -Sn
    

    【讨论】:

    • 感谢您的困惑。
    • 但我已经看到 Hn 和 Sn 的值为 1024。所以不应该在第 974 次创建时失败。
    • @badri:除非系统打开了另外 50 个 fd,否则不会。
    • @badri:你确定你没有忘记关闭任何流/套接字/连接的地方吗?
    • 嗨,我很困惑——我需要它们并行。稍后将关闭它们。但正如你所说,我会尝试将它增加到 4096,看看它是否有帮助。
    猜你喜欢
    • 2016-09-07
    • 2011-06-26
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多