可能有多少个套接字连接?
-
19-08-2019 - |
题
有谁知道现代标准根服务器上可以有多少个 tcp 套接字连接?(通常每个连接上的流量较少,但所有连接都必须始终处于运行状态。)
编辑: 我们将使用 Linux 服务器。
解决方案
谷歌周围的“C10K”的问题。这基本上是讨论和技术围绕管理10,000个或更多个同时连接。
我怀疑被选择这个号码,因为它很难的,但理论上可行的。
其他提示
我实现了 1600k 并发空闲套接字连接,同时在 Linux 桌面(16G RAM,I7 2600 CPU)上实现了 57k req/s。它是一个用 C 语言编写的带有 epoll 的单线程 http 服务器。源代码已上线 github, , A 在这里写博客.
编辑:
我使用 JAVA/Clojure 在同一台计算机上进行了 600k 并发 HTTP 连接(客户端和服务器)。详细信息 邮政, ,HN讨论: http://news.ycombinator.com/item?id=5127251
连接的成本(使用 epoll):
- 应用程序每个连接都需要一些 RAM
- TCP缓冲区2*4k~10k,或更多
- epoll 需要一些内存用于文件描述符,来自 epoll(7)
每个注册文件描述符的成本约为 90 在 32 位内核上为字节,在 64 位内核上约为 160 字节。
此不仅取决于操作系统中的问题,而且还取决于配置,潜在地实时配置。
对于Linux:
cat /proc/sys/fs/file-max
将显示的文件描述符的当前最大数目的总允许同时打开。请查看 http://www.cs.uwaterloo.ca/~brecht/servers /openfiles.html
10,000? 70000?是,所有:)
FreeBSD的可能是你想要的服务器,这里的href="http://rerepi.wordpress.com/2008/04/19/tuning-freebsd-sysoev-rit/" rel="noreferrer">稍微,其已取得了一些有趣的功能,如零拷贝插座有一段时间了,用的kqueue作为一个完成端口机制沿。
的Solaris可以处理100,000个连接在上个世纪的回!他们说,Linux的效果会更好。
在最好的说明我已经遇到正在写一个可扩展的Web服务器此演示文稿/纸。他说不怕它喜欢它:)
同为软件:在所述白痴 应用层强制很大 在OS层上的创新。因为 Lotus Notes中保持一个TCP连接 每个客户端的开放,IBM的主要贡献 对于“一个工艺优化, 100.000打开的连接”的情况下到Linux
和O(1)调度原本 创建一些高分 无关的Java基准测试。底端 线是这个臃肿好处网络连接TS所有的 我们。
在Linux下,你应该考虑使用epoll的用于异步I / O。这也可能是值得微调插座缓冲区不浪费每个连接太多的内核空间。
我猜你应该能够在合理的机器上达到100K连接。
在开放套接字的数上限是在/ proc文件系统配置的
cat /proc/sys/fs/file-max
最高为传入由整数限定的限制在OS的连接。
Linux本身允许的十亿打开的套接字。
要使用套接字您需要应用程序监听,例如web服务器,并且将使用每个插槽的一定量的RAM。
RAM和CPU将介绍实际的限制。 (现代2017,认为不百万数十亿)
1个百万是可能的,不容易的。期望使用的RAM X千兆字节来管理百万套接字。
发送 TCP连接通过端口号〜65000每个IP的限制。你可以有多个IP地址,但不是无限的IP地址。 这是在TCP不是Linux的限制。
取决于应用。如果只从每个客户端了几包,100K是Linux很容易的。我的团队的工程师进行了测试年前完成,结果表明:当没有从客户端软件包建立连接之后,Linux的epoll的可以在50%观看400K FD在CPU占用率可读性 -
哪些操作系统?
有关Windows机器,如果你正在写一个服务器具有良好的伸缩性,因此使用I / O完成端口和异步I / O,那么主要的限制是,你正在使用的非分页池的量每个活动连接。这直接转换成基于您的机器上安装的(非分页池是基于安装的总存储器的有限的,固定大小的量)的存储器量的限制。
对于那些没有看到多少流量可以减少使它们更有效地通过张贴“零字节读”不使用非分页池,不影响锁定页限制(另一个潜在的有限资源连接即可能会阻止你有大量的套接字连接开放)的。
除此之外,还有,你需要配置文件,但我已经成功地得到服务器上的适度指定(760MB内存),超过70,000个并发连接;看到这里 http://www.lenholgate.com/博客/ 2005/11 / Windows的TCPIP服务器 - performance.html 了解更多详情。
显然,如果您使用效率较低的结构,例如“每个连接线”或“选择”,则你应该期望实现稍欠数字;但是,IMHO,有根本没有理由来选择这样的体系结构的Windows套接字服务器。
修改查看这里 http://blogs.technet.com/ markrussinovich /存档/ 2009年/ 3月26日/ 3211216.aspx ;非分页池的量的计算方法在Vista已经改变,Server 2008和现在有更多可用的。
现实针对应用,更然后4000-5000在单个机器上开放套接字变得不切实际。只是检查活动上的所有插座和管理他们开始成为一个性能问题 - 尤其是在实时环境