Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | 视频教程 | bilibili | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 打赏(Donations) | About
知乎专栏多维度架构 | 微信号 netkiller-ebook | 51CTO:视频教程

19.2. 影响连接的因素有哪些?

上面解释了服务器端与客户端,服务器能开出的端口数量会影响最终连接数的数量。除此之外还有哪些因素呢?

文件打开数量,还以WEB服务器为例,浏览器请求HTML资源,Nginx 会到磁盘上索引对应的文件并打开,将文件内容读到内存,并返回给浏览器。如果系统限制了文件打开数量,Socket 请求仍会失败。如果是 Unix Socket 文件打开数量限制,直接影响 Socket 连接数。

磁盘IO性能,多线程打开文件太多,导致读取问题等待时间过长,造成线程堆积。

内存限制,服务器端每接受一个TCP连接请求,就会为多线程/进程分配内存空间。如果限制了进城的内存空间,内存不足,线程创建失败。也就是意味着无法再有新链接进入服务器。

进程数限制,这个因素只影响机遇多进程的TCP Socket,对于多线程TCP Socket 不影响。

网卡的带宽,每个TCP 链接请求产生多少带宽,全负荷工作时带宽开销时多少,一般网卡时1GB,如果超过1GB,外面的链接也是会超时的。目前光纤网卡主流40GB 性价比比较高。

网络设备,交换机容量和背板带宽,从客户端到服务器端,需要经过交换机,交换机的交换能力,和背板带宽(交换机内存)决定了你从客户能发出多少链接,服务器端能接受多少链接。交换机不给力,并发就上不去。还有路由器或防火墙的会话数,这部分请参看《多维度架构之会话数》

以上设置通过 ulimit / sysctl 两个命令完成内核参数的调整。这里不多介绍,有兴趣看笔者相关文章,如果比较懒可以到我的知乎主页,点付费咨询。

网站:http://www.netkiller.cn/ | 知乎:netkiller | 51CTO:视频教程 | Bilibili:netkiller | Github:netkiller