可能有多少个套接字连接?
- 2024-10-11 08:36:00
- admin 原创
- 74
问题描述:
有人知道现代标准 Linux 服务器上可以建立多少个 tcp 套接字连接吗?
(通常每个连接上的流量较少,但所有连接必须始终处于开启状态。)
解决方案 1:
我在 Linux 桌面(16G RAM,I7 2600 CPU)上实现了 1600k 个并发空闲套接字连接,同时实现了 57k 个请求/秒。这是一个用 C 语言编写的单线程 http 服务器,带有 epoll。源代码在github上,博客在这里。
编辑:
我在同一台计算机上使用 JAVA/Clojure 建立了 600k 个并发 HTTP 连接(客户端和服务器)。详细信息帖子,HN 讨论:http://news.ycombinator.com/item? id=5127251
连接的成本(使用 epoll):
应用程序每个连接需要一些 RAM
TCP 缓冲区 2 * 4k ~ 10k,或更多
epoll 需要一些内存用于文件描述符,来自 epoll(7)
每个注册的文件描述符在 32 位内核上大约占用 90 字节,在 64 位内核上大约占用 160 字节。
解决方案 2:
这不仅取决于所涉及的操作系统,还取决于配置,可能是实时配置。
对于 Linux:
cat /proc/sys/fs/file-max
将显示当前允许同时打开的最大文件描述符总数。查看http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html
解决方案 3:
/proc 文件系统中可以配置打开套接字的数量限制
cat /proc/sys/fs/file-max
由整数限制定义的操作系统中传入连接数的最大值。
Linux 本身允许数十亿个打开的套接字。
要使用套接字,您需要一个监听的应用程序,例如 Web 服务器,并且每个套接字将使用一定数量的 RAM。
RAM 和 CPU 将引入真正的限制。(现代 2017 年,想想数百万而不是数十亿)
100 万是可能的,但并不容易。预计需要使用 X GB 的 RAM 来管理 100 万个套接字。
每个 IP 的传出TCP 连接受端口号限制,约为 65000。您可以拥有多个 IP 地址,但 IP 地址数量不能无限。这是 TCP 的限制,而不是 Linux 的限制。
解决方案 4:
10,000?70,000?就这些吗 :)
FreeBSD 可能是您想要的服务器,这里有一篇关于调整它以处理 100,000 个连接的小博客文章,它已经有一些有趣的功能,例如零拷贝套接字,以及作为完成端口机制的 kqueue。
Solaris在上个世纪可以处理 100,000 个连接!他们说 Linux 会更好
我见过的最好的描述是这篇关于编写可扩展网络服务器的演示文稿/论文。他不怕说出真相 :)
软件也是如此:应用层的白痴迫使操作系统层进行重大创新。由于 Lotus Notes 为每个客户端保持一个 TCP 连接打开,因此 IBM 为 Linux 的“一个进程,100,000 个打开连接”情况做出了重大优化
而 O(1) 调度程序最初是为了在一些不相关的 Java 基准测试中取得好成绩而创建的。归根结底,这种膨胀对我们所有人都有好处。
解决方案 5:
在 Linux 上,您应该考虑使用 epoll 进行异步 I/O。微调套接字缓冲区可能也是值得的,这样就不会在每个连接上浪费太多的内核空间。
我猜测你应该能够在一台合理的机器上达到 100k 个连接。
解决方案 6:
取决于应用程序。如果每个客户端只有几个包,那么 100K 对于 Linux 来说很容易。我团队的一位工程师几年前做过测试,结果显示:当建立连接后没有来自客户端的包时,Linux epoll 可以在 CPU 使用率低于 50% 的水平下监视 400k fd 的可读性。
解决方案 7:
哪种操作系统?
对于 Windows 计算机,如果您要编写一个可扩展性好的服务器,因此使用 I/O 完成端口和异步 I/O,那么主要的限制就是您用于每个活动连接的非分页池的数量。这直接转化为基于您的计算机已安装的内存量的限制(非分页池是一个有限的、固定大小的量,基于安装的总内存)。
对于流量不大的连接,您可以通过发布不使用非分页池且不影响锁定页面限制(另一种可能有限的资源,可能会阻止您打开大量套接字连接)的“零字节读取”来减少它们,从而提高效率。
除此之外,您还需要进行分析,但我已经设法在适度指定(760MB 内存)的服务器上获得了超过 70,000 个并发连接; 有关更多详细信息,请参阅此处http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html 。
显然,如果您使用效率较低的架构(例如“每个连接一个线程”或“选择”),那么您应该期望获得不那么令人印象深刻的数字;但是,恕我直言,根本没有理由为 Windows 套接字服务器选择这样的架构。
编辑:参见此处http://blogs.technet.com/markrussinovich/archive/2009/03/26/3211216.aspx;Vista 和 Server 2008 中非分页池数量的计算方式已经发生了变化,现在有更多的可用方式。
解决方案 8:
实际上,对于应用程序来说,在一台机器上打开超过 4000-5000 个套接字是不切实际的。仅仅检查所有套接字上的活动并管理它们就会开始成为一个性能问题 - 尤其是在实时环境中。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件