我正在使用Squid运行专用代理服务器,并且我正在尝试获得服务器可以处理的最大连接数的感觉。我已经意识到这归结为Linux机器上可用的文件描述符。
我已经找到了很多关于增加最大文件描述符的信息,但我想找出理论最大值。根据StackOverflow的问题"为什么操作系统限制文件描述符?",它归结为可用的系统RAM,这很有意义。
现在,给定我有多少可用的RAM,我如何确定操作系统的文件描述符的最大值?
这个值显然还能让系统稳定运行。考虑到其他高端生产服务器,也许有人会有一个想法?最大化潜在的同时连接数(文件描述符)的"标准"是什么?如果您能深入了解如何最大化Linux系统的文件描述符,我将不胜感激。
你有很多限制。
-
多路复用。如果您的应用程序使用一个体面的后端,这应该不是一个问题。Libev声称在100,000个文件描述符下复用350us延迟
-
应用程序的速度。在这种规模(相当低)下,每个请求1ms的应用程序延迟将花费几乎两分钟的时间来处理100,000个请求。
-
带宽。根据您的应用程序和协议的效率,这可能是一个问题。你说这是鱿鱼代理…如果您是代理网站:没有缓存请求网站的客户端可以接收几百KB到几MB的任何地方。如果每个客户端的平均整页请求是500KB,那么您将以每秒2000个请求的速度获得一个完整的千兆连接。这可能是你的限制因素。
2000个文件描述符是相当小的数量。我曾见过用Python等语言编写的简单应用程序在单个处理器核心上扩展到超过3000个活动连接,而没有出现严重的延迟。
您可以在多个客户端计算机上运行apachebench等软件来测试squid代理,以获得一些真实的数字。将文件描述符限制设置为2000+很容易,然后看看会发生什么,以及之后是否会有不同。