我们如何限制文件描述符始终小于 1024?

How can we limit file descriptor to always be less than 1024?

select 系统调用有一个限制,它不能超过 1024。这就是文档所说的

WARNING: select() can monitor only file descriptors numbers that
       are less than FD_SETSIZE (1024)—an unreasonably low limit for
       many modern applications—and this limitation will not change.
       All modern applications should instead use poll(2) or epoll(7),
       which do not suffer this limitation.

我们仅在 AWS EC2 实例中遇到过这种行为。在 AWS 之外 fd 总是 < 1024

Linux 系统 (Suse Linux 15 SP2) 中是否有始终创建小于 1024 的 fds 的设置?

你不想这样做。 Linux 总是使用尽可能低的文件描述符。所以如果你得到文件描述符 1024 那么这意味着文件描述符 0 到 1023 都已经被使用了。

如果你让 Linux 只使用文件描述符 0-1023,那么你的程序仍然无法运行,因为你不会得到文件描述符 1024,而是会得到一个错误,说没有任何文件描述符它可以使用更多的文件描述符。

你应该:

  1. 确保您的程序在完成文件描述符后关闭它们。
    也许全部使用描述符 0-1023 的原因是因为您忘记关闭它们。这么多肯定你的程序关闭了它们。
    如果它们是您的程序实际使用的真实文件描述符,而不仅仅是您忘记关闭的文件描述符,那么继续第 2 步...
  2. 使用 poll 而不是 select,如文档所述。这不是一个困难的改变。
  3. 考虑使用 epoll,当您同时轮询大量文件描述符时,它比 select 更有效。然而,它要复杂得多。