linux服务器最大支持连接数
Posted Parker@1989
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux服务器最大支持连接数相关的知识,希望对你有一定的参考价值。
当我们被问到一台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参数可修改
root@0 # 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内存,甚至可能更大。
root@0 # 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服务器最大支持连接数的主要内容,如果未能解决你的问题,请参考以下文章
SOCKET编程之一个端口如何建立多个TCP连接?(用fork子进程selectpollepoll都是可以的)一个端口最大支持建立多少个tcp连接?
apache当前并发访问数是啥?apache进程数,子进程数都是啥意思呀??