我正在用 C++ 编写一个服务器软件,并打算让每个实例管理 10k-20k 个同时连接。我已经让它运行起来,并且能够每秒处理大量会立即关闭的远程连接,但是如果服务器同时连接数超过 1024 个,它就会阻塞,因为它被限制在这么多的打开文件描述符上。
我查看了网上发布的许多解决方案,但还是感到很困惑。我按照人们说的做了所有事情,但还是没有找到适合我的应用程序的解决方案。
我指定它是我的“自定义应用程序”,因为系统上我的帐户下的几乎每个进程都有 40k 文件描述符的限制,唯一的例外是我的程序,它仍然处于基本的 1024/4096 文件描述符限制,即使一切都说它实际上应该是 40000/40000。
/etc/security/limits.conf
包含行* - nofile 40000
ulimit -n
印刷40000
cat /proc/sys/fs/file-max
印刷100000
cat /proc/[application pid]/limits
说文件描述符限制是soft: 1024 / hard: 4096
cat /proc/[application's parent pid]/limits
表示文件描述符限制soft: 40000 hard: 40000
与我如何启动程序无关(通过 xterm、tty1、bash、sh、cinnamon 等)。
我甚至遵循了指示这里并修改了我的各种定义标题__FD_SETSIZE
,并将它们全部更改为40000
我已经尝试解决这个问题一段时间了,任何帮助都会很感激。我使用的发行版是 Linux Mint 17.2,内核版本是 3.16.0-38-generic,我的 g++ 是版本 4.8.4。