ero*_*ppa 13 sockets linux file file-descriptor
我被告知我的服务器拒绝接受特定端口的客户端网络连接可能是由于缺少文件描述符.我查看了这一切,并在此处阅读:http: //www.netadmintools.com/art295.html
所以我测试了我的系统,我得到了这个:
cat /proc/sys/fs/file-nr
1088 0 331287
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我的限制很高但我有0个可用的文件描述符?为什么?我如何为我的服务器解决这个问题?
即使我关闭了我的服务器,第二列实际上仍然保持在0,甚至在启动后它甚至保持在0!
wno*_*ise 11
您想要查看/ proc/sys/fs/file-max
从最近的linux/Documentation/sysctl/fs.txt:
file-max&file-nr:
内核动态分配文件句柄,但是它还没有再次释放它们.
file-max中的值表示Linux内核将分配的最大文件句柄数.当您收到大量有关用尽文件句柄的错误消息时,您可能希望增加此限制.
从历史上看,file-nr中的三个值表示已分配文件句柄的数量,已分配但未使用的文件句柄的数量以及最大文件句柄数.Linux 2.6总是报告0作为空闲文件句柄的数量 - 这不是错误,它只是意味着分配的文件句柄数与使用的文件句柄数完全匹配.
使用printk报告尝试分配比file-max更多的文件描述符,查找"VFS:达到文件最大限制".
编辑:潜在的错误可能不是系统耗尽全局文件描述符,而只是你的进程.似乎问题是select的最大大小限制.
它看起来不像你正在达到系统文件desriptor限制.看到这个答案.
也许您的服务器进程使用select并因此限制为1024个描述符?如果切换到另一种机制,例如,poll您将不再限于1024个描述符.
select()适用于fd_sets
以下内容应定义为宏:
FD_SETSIZE
Run Code Online (Sandbox Code Playgroud)Maximum number of file descriptors in an fd_set structure.
尝试FD_SETSIZE在您的系统上查找或输出.
如果你发现FD_SETSIZE对你来说太低了,我宁愿试图远离select试图增加FD_SETSIZE通常更难的东西.