可能有多少个套接字连接?

2024-10-11 08:36:00
admin
原创
73
摘要:问题描述:有人知道现代标准 Linux 服务器上可以建立多少个 tcp 套接字连接吗?(通常每个连接上的流量较少,但所有连接必须始终处于开启状态。)解决方案 1:我在 Linux 桌面(16G RAM,I7 2600 CPU)上实现了 1600k 个并发空闲套接字连接,同时实现了 57k 个请求/秒。这是一个...

问题描述:

有人知道现代标准 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 个套接字是不切实际的。仅仅检查所有套接字上的活动并管理它们就会开始成为一个性能问题 - 尤其是在实时环境中。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用