服务器的TCP连接限制:如何优化并提高服务器的并发连接数?
创始人
2025-01-16 23:03:26
0次

🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注),发送【资料】可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景、中间件系列笔记和编程高频电子书!
【11来了】文章导读地址:点击查看文章导读!
🍁🍁🍁🍁🍁🍁🍁🍁

服务器的TCP连接限制:如何优化并提高服务器的并发连接数?

在这里插入图片描述

Linux服务器最大能打开的文件数量

在 Linux 服务器中一切皆文件,将网络接口、进程等抽象概念都视作文件,以统一的方式进行管理和操作

那么在服务器中,能打开的最大文件数量受 4 个参数影响,分别是:

  1. fs.file-max:内核参数,系统级别的限制表示整个系统可以打开的最大文件数,root 用户不会受此参数影响

  2. soft nofile:用户级别的软限制,限制单个进程上可以打开的最大文件数,soft nofile 的值比 fs.file-max 的值要小得多

  3. hard nofile:用户级别的硬限制,限制单个进程上可以打开的最大文件数,默认情况下,hard nofile 的值通常大于等于 soft nofile 的值,soft nofile 是一个警告阈值,超过了并不会阻止文件描述符的打开,而是发出警告,但是 hard nofile 是实际的最大限制,超过它将无法打开文件描述符

  4. fs.nr_open:内核参数,进程级别的限制,限制单个进程可以打开的最大文件数

    可以通过命令 sysctl fs.nr_open 查看该值大小

这三个参数之间的值大小设置需要注意以下几点:

  • hard nofile 的值大于等于 soft nofile
  • fs.nr_open 的值大于 hard nofile
  • fs.nr_open 的值不要超过系统的硬件资源限制

调整服务器能打开的最大文件数

fs.file-max 和 fs.nr_open 参数设置

通过修改 /etc/sysctl.conf 文件来修改能打开的最大文件数

vim /etc/sysctl.conf # 添加如下行 fs.file-max=1100000 // 系统级别设置成110万,多留点 buffer   fs.nr_open=1100000 // 进程级别也设置成110万,因为要保证比 hard nofile大 # 使配置生效 sysctl -p 

soft nofile 和 hard nofile 参数设置

显示当前用户的最大文件描述符限制可以使用以下命令:

ulimit -n 

这个值可以通过修改 /etc/security/limits.conf或者/etc/security/limits.d/* 的值,添加如下行:

vi /etc/security/limits.conf # 将用户级别都设置成 100w * soft nofile 1000000 * hard nofile 1000000 

一台服务器最大支持的连接数量

TCP 连接建立之后,其实就是客户端和服务器端在内存中维护的一组 socket 内核对象,只要存储 源IP、源端口号、目标IP、目标端口号

那么在理想情况下,如果只维护客户端和服务端的 socket 对象的话,最大可以建立的连接数量是由 IP + 端口号来决定的,只要 IP + 端口号不重复,那么就可以找到对应地址,建立连接,理论最大连接数量可以建立 2^32(IP数) * 2^16(端口数) ≈ 两百多亿 条连接

但是这肯定是不可能的,这么多条连接,内存也放不下呀,而且连接中如果有数据请求,需要 CPU 去处理,CPU 也处理不过来

因此最大的连接数量收到了 内存 和 CPU 两个方面的限制

在真实场景中,有频繁的数据收发的数据处理,一台服务器可以支撑 1000 个连接就算比较好的了,在建立 TCP 连接中,服务器端的开销并不在连接的建立上,而是花在了对连接中的数据进行业务逻辑处理的过程中,这个过程是很占用 CPU 的!

一台客户机器最多可以发出多少TCP连接?

上边已经说了,建立 TCP 连接,其实就是维护一组 socket 内核对象的数据,也就是: 源IP、源端口号、目标IP、目标端口号

那么只要有其中一个元素不同,便可以区分出是不同的 TCP 连接

假设客户机器的 IP 地址不会发生变化,并且客户端只和一台 server 服务器建立 TCP 连接,那么一台客户机器可以发出的 TCP 连接的数量取决源端口号 的数量,源端口号的可用范围是 【0-65535】,所以一台客户机器对一台 server 服务器可以建立的最大 TCP 连接的数量是:65535 个连接

但是客户端的可用端口范围一般达不到 65535 个,受到了内核参数 ip_local_port_range 的影响,默认值是 32768 61000,可以通过修改 /etc/sysctl.conf 文件来调整可用端口范围:

# 修改文件 vi /etc/sysctl.conf # 添加如下内容 net.ipv4.ip_local_port_range = 32768 60999 # 使修改生效 sysctl -p 

相关问题

首先,在三次握手中,socket 的连接请求通过一个队列进行存储,队列长度通过参数 net.core.somaxconn 来控制,默认是 128,如果连接请求的数量很大,而队列长度不够,则会导致后续的连接请求被抛弃,可以通过修改此参数的值来增加存储请求的队列长度,减少服务端的请求丢失情况!

# 查看当前系统的net.core.somaxconn值 sysctl net.core.somaxconn # 修改队列长度 vi /etc/sysctl.conf # 添加如下内容 net.core.somaxconn =  # 使修改生效 sysctl -p 

相关内容

热门资讯

最新技巧!!wepoker有没... 很多人使用云端 AI 时,都担心wepoker有没有辅助、内部资料上传带来隐私风险。这款本地运行的 ...
一秒答解!wepoker怎么增... 您好,一秒答解!wepoker怎么增加运气,WPK有挂吗确实有挂下载(最初有辅助挂)这款游戏可以开挂...
一秒答解!wpk辅助器,德扑之... wpk辅助器AI 游戏攻略黑科技上线本地缓存功能,离线查阅能力开挂。提前下载对应游戏攻略数据包,断网...
分辨真假!德普之星透视辅助,w... 分辨真假!德普之星透视辅助,wepoker开挂透视教程脚本(总是是真的有辅助挂)AI 是一款可以让一...
每日必看推荐!wepoker怎... 您好:wepoker怎么提高运气这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很...
推荐一款!!wepoker黑侠... 一款 AI 游戏攻略黑科技工具上线,查攻略效率直接开挂。它整合版本更新、装备搭配、BOSS 打法、牌...
一秒答解!wpk俱乐部辅助器,... 一秒答解!wpk俱乐部辅助器,德扑之星开挂脚本助手(固有有辅助器)AI 是一款可以让一直输的玩家修复...
玩家攻略!wepoker好友房... 您好,玩家攻略!wepoker好友房开挂,WPK哪里有挂神器(一贯有开挂)这款游戏可以开挂的,确实是...
重大通报!!智星德州可以透视吗... 很多人使用云端 AI 时,都担心智星德州可以透视吗、内部资料上传带来隐私风险。这款本地运行的 AI ...
玩家爆料!智星菠萝有挂吗,WP... 智星菠萝有挂吗AI 游戏攻略黑科技上线本地缓存功能,离线查阅能力开挂。提前下载对应游戏攻略数据包,断...