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

2024-10-11 08:36:00
admin
原创
225
摘要:问题描述:有人知道现代标准 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 个套接字是不切实际的。仅仅检查所有套接字上的活动并管理它们就会开始成为一个性能问题 - 尤其是在实时环境中。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2588  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1553  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   31  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   26  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   21  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用