我有一个生产 squid 服务器,它在提供内容并报告它没有文件描述符时遇到了一些问题。我成功地将它从 1024(默认)增加到 4096,它似乎解决了我在日志中的错误。对于某些未缓存的调用,我仍然看到响应代码 0 和 0 字节,这让我相信在高峰量(启动风暴)中,我的文件描述符计数仍然太低。
我已经阅读了一些帖子,可以将设置设置为 24k、40k 甚至 70k。由于这是一个专用的 squid 盒,我不担心其他进程/用户在系统范围内竞争文件描述符,但我真的很想知道粗略计算我应该配置多少个文件描述符的最佳实践是什么对于 ulimit -n。
在我的配置中,我有最多 3000 个客户端 TCP 连接,最多 3000 个服务器端 TCP 连接,以及一些在 squid 配置中默认配置的日志文件(cache.log、squid.log)。是否像说我应该将我的 ulimit -n 设置为 3000 + 3000 + 2 + (一些开销)一样简单?由于缺乏有关此事的文档,我可能会将其设置为 24k 只是为了永远不必处理它,但我更喜欢遵循最佳实践公式 - 就像使用 apache2 一样,您可以计算多少请求所需的内存希望能够同时处理。
编辑:忘了提到我没有将这些缓存文件写入磁盘,它们保留在内存中。这是几百个文件(总共<5 MB)网站是唯一通过这个加载的页面,所以这就是我省略磁盘读/写文件描述符的原因。