服务器测试百万并发出现问题

服务器百万并发的时候fd分配到了27999之后就显示没有fd可分配了,是什么原因造成的呀

零声的同学你好,这个问题在我的文章https://blog.csdn.net/qq_42956653/article/details/125653754介绍里面进行了解释,你可以参考我的文章。那么在下面我进行简单的问题分析,详细解释请移步我的文章。后续有什么问题可以在我的评论区留言,看到会回复。

  1. 你的open files设置的太小,可以调大
  2. 调大后还是不行,虽然端口有6w个,但是linux只给我们使用2.8w个,sysctl net.ipv4.ip_local_port_range,所以你要用五元组去乘法运算,算一下你这台服务器上能有多少个连接,这也就是为什么king老师上课的时候开了100个端口,那么理论上能连接280w个
  3. netfilter过滤器的限制,不同的linux略有差异,反正netfilter会限制最大连接数量,具体去看我的文章
  4. 内存不足以分配新连接,否则killed

你要先关注一下几点:
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 没有关闭,关注下你写的代码

系统分配给进程的文件描述符数量是有限制的,建议你查看一下 最大文件描述符数的限制。如果达到了最大限制值,就修改一下。可以参考我写的这篇文章。

检查一下内存够不够呢