专栏名称: 51CTO技术栈
有趣 | 有料 | 有内涵,为您提供最优质的内容,愿我们一起悦享技术,成就人生。
目录
相关文章推荐
51好读  ›  专栏  ›  51CTO技术栈

一台Linux服务器最多能支撑多少个TCP连接?

51CTO技术栈  · 公众号  · 程序员  · 2020-12-31 18:05

正文

送福利啦

关注 鸿蒙技术社区 ,回复 【鸿蒙】 价值 399元 的鸿蒙 开发板套件 (数量有限,先到先得) ,还可以 免费下载 鸿蒙 入门资料


👇 扫码 立刻关注 👇

专注开源技术,共建鸿蒙生态


在网络开发中,我发现有很多同学对一个基础问题始终是没有彻底搞明白。那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题。


图片来自 Pexels


困惑很多人的并发问题


很多同学看到这个问题的第一反应是 65535。原因是:“听说端口号最多有 65535 个,那长连接就最多保持 65535 个了”。


是这样的吗?还有的人说:“应该受 TCP 连接里四元组的空间大小限制,算起来是 200 多万亿个!”


如果你对这个问题也是理解的不够彻底,那么今天讲个故事讲给你听!


一次关于服务器端并发的聊天



TCP 连接四元组是源 IP 地址、源端口、目的 IP 地址和目的端口。任意一个元素发生了改变,那么就代表的是一条完全不同的连接了。


拿我的 Nginx 举例,它的端口是固定使用 80。另外我的 IP 也是固定的,这样目的 IP 地址、目的端口都是固定的。剩下源 IP 地址、源端口是可变的。


所以理论上我的 Nginx 上最多可以建立 2 的 32 次方(ip 数)×2 的 16 次方(port 数)个连接。这是两百多万亿的一个大数字!


进程每打开一个文件(Linux 下一切皆文件,包括 Socket),都会消耗一定的内存资源。


如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。


所以 Linux 系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。


这三个限制的含义和修改方式如下:

  • 系统级: 当前系统可打开的最大数量,通过 fs.file-max 参数可修改。

  • 用户级: 指定用户可打开的最大数量,修改 /etc/security/limits.conf。

  • 进程级: 单个进程可打开的最大数量,通过 fs.nr_open 参数可修改。


我的接收缓存区大小是可以配置的,通过 sysctl 命令就可以查看:






请到「今天看啥」查看全文