知乎专栏 | 多维度架构 | 微信号 netkiller-ebook | QQ群:128659835 请注明“读者” |
上面解释了服务器端与客户端,服务器能开出的端口数量会影响最终连接数的数量。除此之外还有哪些因素呢?
文件打开数量,还以WEB服务器为例,浏览器请求HTML资源,Nginx 会到磁盘上索引对应的文件并打开,将文件内容读到内存,并返回给浏览器。如果系统限制了文件打开数量,Socket 请求仍会失败。如果是 Unix Socket 文件打开数量限制,直接影响 Socket 连接数。
磁盘IO性能,多线程打开文件太多,导致读取问题等待时间过长,造成线程堆积。
内存限制,服务器端每接受一个TCP连接请求,就会为多线程/进程分配内存空间。如果限制了进城的内存空间,内存不足,线程创建失败。也就是意味着无法再有新链接进入服务器。
进程数限制,这个因素只影响机遇多进程的TCP Socket,对于多线程TCP Socket 不影响。
网卡的带宽,每个TCP 链接请求产生多少带宽,全负荷工作时带宽开销时多少,一般网卡时1GB,如果超过1GB,外面的链接也是会超时的。目前光纤网卡主流40GB 性价比比较高。
网络设备,交换机容量和背板带宽,从客户端到服务器端,需要经过交换机,交换机的交换能力,和背板带宽(交换机内存)决定了你从客户能发出多少链接,服务器端能接受多少链接。交换机不给力,并发就上不去。还有路由器或防火墙的会话数,这部分请参看《多维度架构之会话数》
以上设置通过 ulimit / sysctl 两个命令完成内核参数的调整。这里不多介绍,有兴趣看笔者相关文章,如果比较懒可以到我的知乎主页,点付费咨询。