【问题标题】:Maximum pollcount for poll()?poll() 的最大多边形数?
【发布时间】:2021-03-24 21:03:20
【问题描述】:

我有一个服务器可以处理来自单个进程的多个套接字。它曾经在 AIX 上运行,我最近将它移植到了 linux。无论如何,在 AIX 上,我将 #define 设置为我将支持的最大套接字数设置为 2000,它工作正常。

当我在 linux 上执行此操作时,poll() 失败并显示 errno=22(无效参数) - 大概是 pollcount 参数。当我将其设置为 1000 时,它工作正常。所以,我只是运气不好-限制在 1000(或 1024,这是 sysconf(_SC_OPEN_MAX) 返回的)。或者有什么我可以调整到这个限制的。

1024 可能在大多数情况下都有效,但这与系统上常规同时用户的数量非常接近。

【问题讨论】:

    标签: linux sockets polling


    【解决方案1】:

    Linux man page for poll()

    错误
    EINVAL nfds 值超过了 RLIMIT_NOFILE 值。

    RLIMIT_NOFILE 也是进程一次可以打开的最大文件描述符数。检查你的限制设置,它在 shell 中是 ulimit -n,在 systemd 中是 LimitNOFILE

    【讨论】:

    • 谢谢。 ulimit -n 确实报告了 1024。虽然我在问如何提高该限制,但事实证明它就像在 .bashrc 中放入“ulimit -n 4094”一样简单。我认为 4096 是一个硬限制,可能难以增加。真的吗?如果是这样,你知道怎么做吗?
    • @littlenoodles,是的,提高限制取决于您运行的环境。从命令行,ulimit -n 可以工作,直到硬限制 (ulimit -Hn),除非您是根。 shell 会话的限制可能来自/etc/security/limits.conf(通过 PAM)。但在某些时候,您可能希望从 systemd 启动服务器,并在那里设置限制。当然,如果服务器本身以 root 身份启动,它可以自己调用setrlimit()
    • 谢谢。目前 4096 可能就足够了,但很高兴知道还有更高的方法。
    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2011-05-15
    • 2011-06-09
    • 2022-01-18
    • 2023-04-11
    • 2021-03-20
    相关资源
    最近更新 更多