最多能创建TCP连接个数

2022-02-10  本文已影响0人  _张鹏鹏_

TCP连接个数受端口号、文件描述符、线程资源、内存资源、CPU资源的限制。

端口号:

系统用一个四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}

在local ip, local port固定、不考虑ip地址分类的情况下,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

实际可用端口范围可以如下查看:

[root]# cat /proc/sys/net/ipv4/ip_local_port_range 
1024 65000

文件描述符:

每建立一个TCP连接,操作系统分配一个文件描述符,linux 对可打开的文件描述符的数量分别作了三个方面的限制:

系统级:当前系统可打开的最大数量,通过 cat /proc/sys/fs/file-max 查看

用户级:指定用户可打开的最大数量,通过 cat /etc/security/limits.conf 查看

进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open 查看

file-max 表示系统级别的能够打开的文件句柄的数量。是对整个系统的限制,并不是针对用户的。

ulimit -n 控制进程级别能够打开的文件句柄的数量。提供对shell及其启动的进程的可用文件句柄的控制。这是进程级别的。

对于服务器来说,file-maxulimit都需要设置,否则会出现文件描述符耗尽的问题。

线程资源:

按照每个连接,启动一个线程的方式,TCP连接个数受线程个数限制,可以用IO复用方式,一个线程管理多个TCP连接。

内存资源:

每个TCP连接本身,以及这个连接所用到的缓冲区,都是需要占用一定内存。

CPU资源:

这个很好理解。

参考文献:

  1. 限制服务器最大并发连接数
  2. 如何优雅的处理 accept 出现 EMFILE 的问题
  3. TCP连接数和文件描述符耗尽分析
  4. 设置Linux打开文件句柄/proc/sys/fs/file-max和ulimit -n的区别
  5. 最多能创建多少个TCP连接?
上一篇下一篇

猜你喜欢

热点阅读