服务器百万并发的时候fd分配到了27999之后就显示没有fd可分配了,是什么原因造成的呀
零声的同学你好,这个问题在我的文章https://blog.csdn.net/qq_42956653/article/details/125653754介绍里面进行了解释,你可以参考我的文章。那么在下面我进行简单的问题分析,详细解释请移步我的文章。后续有什么问题可以在我的评论区留言,看到会回复。
你要先关注一下几点:
1.操作系统能否支持百万连接?
对于绝大部分 Linux 操作系统, 默认情况下确实不支持 C1000K! 因为操作系统包含最大打开文件数(Max Open Files)限制, 分为系统全局的, 和进程级的限制.
2.操作系统维持百万连接需要多少内存?
看看内存的占用情况. 首先, 是操作系统本身维护这些连接的内存占用. 对于 Linux 操作系统, socket(fd) 是一个整数, 所以, 猜想操作系统管理一百万个连接所占用的内存应该是 4M/8M, 再包括一些管理信息, 应该会是 100M 左右.
3.应用程序维持百万连接需要多少内存?
另外应用程序维持百万个空闲的连接, 只会占用操作系统的内存, 应用程序本身几乎不占用内存.
4.百万连接的吞吐量是否超过了网络限制?
假设百万连接中有 20% 是活跃的, 每个连接每秒传输 1KB 的数据, 那么需要的网络带宽是 0.2M x 1KB/s x 8 = 1.6Gbps, 要求服务器至少是万兆网卡(10Gbps).
另外题主是不是用完了fd 没有关闭,关注下你写的代码
系统分配给进程的文件描述符数量是有限制的,建议你查看一下 最大文件描述符数的限制。如果达到了最大限制值,就修改一下。可以参考我写的这篇文章。
检查一下内存够不够呢