一台服务器最多能支撑多少个TCP连接

一个TCP连接由一个四元组所确定

源IP源端口目的IP目的端口

任意一个元素改变,都代表一个新的连接,以Nginx为例,它的端口是固定使用80。另外服务器的IP也是固定的,那么理论上最多可以建立 2 ^ 32 (ip数) × 2 ^ 16 (端口数) 个连接。

文件描述符限制

实际上,能建立的连接远小于这个数字。我们每打开一个连接都对应一个文件描述符fd(linux系统下一切皆文件)。出于安全角度的考虑,linux系统在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。

  • 系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改
  • 用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf
  • 进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改
内存限制

每一条TCP连接都有file、socket等内核对象,这样一个空TCP连接需要占用3.3KB内存,考虑到实际收发还要配置缓存区,这样内存占用更高了。

通过sysctl命令查看接收缓存区大小

$ sysctl -a | grep rmem
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.rmem_default = 212992
net.core.rmem_max = 8388608

tcp_rmem中的第一个值是TCP连接所需分配的最少字节数。该值默认是4K,最大为8MB。所以需要接收数据时,需要起码再分配4K内存。

通过sysctl命令查看发送缓存区大小

$ sysctl -a | grep wmem
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.wmem_default = 212992
net.core.wmem_max = 8388608

tcp_wmem中的第一个值是发送缓存区的最小值,默认也是4K。如果数据很大的话,该缓存区实际分配的也会比默认值大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值