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

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

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1109  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   73  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   63  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   71  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   66  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用