困扰许多人的并发问题
在网络的发展中,我发现很多学生从来没有完全理解一个基本问题也就是说,一台服务器可以支持多少个网络连接我觉得我需要单独发一篇文章来谈谈这个问题
很多同学对这个问题的第一反应是65535理由是:听说端口号最大数量是65535,所以长连接最大数量是65535是这样吗
如果你对这个问题理解的不够透彻,今天我给你讲个故事吧!
关于服务器端并发的聊天
"TCP连接四元组是源IP地址,源端口,目标IP地址和目标端口任何一个元素发生变化,都代表着完全不同的连接以我的Nginx为例,它的端口是80另外,我的IP是固定的,所以目的IP地址和目的端口是固定的其余源IP地址和源端口是可变的因此,理论上,我可以在我的Nginx上建立高达2的32次方×2的16次方的连接
每次进程打开一个文件,都会消耗一定的内存资源如果某个不怀好意的人开始无限期地创建和打开新文件,就会使服务器崩溃所以linux系统为了安全,在很多地方都限制了可以打开的文件描述符的数量,包括系统级,用户级,进程级
系统级:当前系统可以打开的最大数量,可以通过fs.file—max参数修改。
用户级别:指定用户可以打开的最大数量,并修改/etc/security/limits.conf
进程级:可以打开的单个进程的最大数量,可以通过fs.nr_open参数修改。
我的接收缓冲区的大小可以通过sysctl命令进行配置和查看。"
greprmemnet . IP v4 . TCP _ rmem = 4096873808388608 net . core . rmem _ default = 212992 net . core . rmem _ max = 8388608
" tcp _ rmem中的第一个值 "是分配给TCP连接的最小字节数默认值为4K,最大值为8MB也就是说,当您有数据要发送时,我需要为相应的套接字重新分配至少4K内存,或者可能更大
"TCP分配发送缓冲区的大小受参数net.ipv4.tcp_wmem的配置影响 "
grepwmemnet . IP v4 . TCP _ wmem = 4096655368388608 net . core . wmem _ default = 212992 net . core . wmem _ max = 8388608
net.ipv4.tcp_wmem中的第一个值是发送缓冲区的最小值,默认值是4K当然,如果数据很大,实际分配的缓冲区会比默认值大
服务器端百万连接成就记录
你打算怎么办记住Linux对文件对象的最大数量是有限制的,所以如果你想完成这个实验,你必须在用户级,系统级和进程级增加这个限制我们实验的目的是100W,这里设置为110W这一点很重要!因为要保证其他基本命令如ps,vi等在实验过程中是可用的
活动连接数确实达到了100W:
wc—l1000024
目前机器总内存3.9GB,其中内核Slab占用3.2GB,Mem和Buffers加起来只有100多MB:
$ cat/proc/meminfoMemTotal:3922956 kbmemfree:96652 kbmemavailable:6448 kbbuffers:44396 kbslab:3241244 kbkb
使用slabtop命令,您可以看到有100W个内核对象,分别是densty,flip,sock_inode_cache和TCP:
标签
后端互联网业务的一个特点就是高并发但是,一个服务器可以支持多少个TCP连接这个问题似乎困扰了很多同学
学习是一件痛苦的事情,尤其是当我们杂志的很多读者朋友在一整天的工作之后来看我的技术杂志上的文章我一直在想,技术内容最后怎么组织,让大家看得懂,省一点脑细胞这篇关于服务器最大并发的文章想了很久,但是两三个版本都不尽如人意今天终于想出了一个让大家更容易理解的方法,算我自己
。声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。