欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux服务器最大支持连接数

程序员文章站 2022-03-11 12:04:59
...

当我们被问到一台linux服务器最多可以支持多少连接时,很多人第一反应是65535个,因为端口是65535个,还有人说受到TCP连接里四元组的空间大小限制,那么到底是多少?

首先解释一下TCP连接的四元组,源IP、源端口、目的IP、目的端口,每一个元素的改变,都会生成一个新的链接。因为服务器的IP是固定的,假设端口也是固定的,就是访问80端口,那么理论上还可以建立2的32次方(IP数量)× 2的16次方(端口数),将近200多亿的连接了。这当然是不可能的,原因请继续往下看。

因为在Linux系统下一切皆文件,那么每创建一个进程都会创建一个文件对象,而创建的文件对象都会消耗一定的内存资源,为了避免五险创建和打开文件导致系统崩溃,操作系统对打开的文件时有限制的

这三个限制的含义和修改方式如下:
用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf
进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改
系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改

[email protected] # sysctl -a|grep rmem
net.core.rmem_default = 212992
net.core.rmem_max = 212992
net.ipv4.tcp_rmem = 4096	87380	6291456
net.ipv4.udp_rmem_min = 4096

其中在tcp_rmem"中的第一个值是为你们的TCP连接所需分配的最少字节数。该值默认是4K,最大的话8MB之多。也就是说你们有数据发送的时候我需要至少为对应的socket再分配4K内存,甚至可能更大。

[email protected] # sysctl -a|grep wmem
net.core.wmem_default = 212992
net.core.wmem_max = 212992
net.ipv4.tcp_wmem = 4096	16384	4194304
net.ipv4.udp_wmem_min = 4096

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

相关标签: Linux