有谁知道在现代标准根服务器上可以有多少个tcp-socket连接?(每个连接的流量通常较少,但所有连接都必须一直在运行.)
编辑:我们将使用Linux服务器.
我实现了1600k并发空闲套接字连接,同时在Linux桌面上实现了57k req/s(16G RAM,I7 2600 CPU).它是用C语言编写的单线程http服务器.源代码在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个字节.
这不仅取决于所讨论的操作系统,还取决于配置,可能的实时配置.
对于Linux:
cat /proc/sys/fs/file-max
将显示允许同时打开的当前最大文件描述符数.查看http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html
万?70000?这就是全部 :)
FreeBSD可能就是你想要的服务器,这里有一篇关于调整它以处理100,000个连接的博客文章,它有一些有趣的功能,比如零拷贝套接字已经有一段时间了,还有kqueue作为完成端口机制.
Solaris可以在上个世纪处理100,000个连接!他们说linux会更好
我遇到的最好的描述是关于编写可伸缩的Web服务器的演示文稿/论文.他不怕说它就像:)
软件相同:应用层上的cretins强制在OS层上进行重大创新.由于Lotus Notes为每个客户端打开一个TCP连接,因此IBM为Linux的"一个进程,100.000个打开连接"案例做出了重大优化
O(1)调度程序最初是为了在一些不相关的Java基准测试中得分而创建的.最重要的是,这种膨胀使我们所有人受益.
在Linux上,您应该考虑使用epoll进行异步I/O. 也许值得微调套接字缓冲区,以免每个连接浪费太多内核空间.
我猜你应该能够在合理的机器上达到100k连接.
在/ proc文件系统中可以配置打开套接字的数量限制
cat /proc/sys/fs/file-max
整数限制定义的操作系统中传入连接的最大值。
Linux本身允许数十亿个开放套接字。
要使用套接字,您需要侦听应用程序,例如Web服务器,并且每个套接字将使用一定数量的RAM。
RAM和CPU将引入实际限制。(现代,2017年,以百万计而非数十亿美元)
一百万是可能的,并不容易。预计将使用X千兆字节的RAM管理100万个套接字。
传出 TCP连接受每个IP的端口号〜65000限制。您可以有多个IP地址,但不能有无限个IP地址。这是TCP而非Linux的限制。