![/etc/hosts 的大小限制(Linux)](https://linux22.com/image/677679/%2Fetc%2Fhosts%20%E7%9A%84%E5%A4%A7%E5%B0%8F%E9%99%90%E5%88%B6%EF%BC%88Linux%EF%BC%89.png)
在开始看到性能下降之前,是否有人知道 Linux 系统上 /etc/hosts 的理论大小限制是多少?
此外,有人可以向我指出一些官方来源,说明预期的限制吗?
答案1
使用源,迈克。
解析器使用线性搜索文本文件来定位条目。这是一个没有索引的数据库。因此,在没有附加缓存功能的情况下,查找的成本将为 O(n)。至于何时会导致性能下降,这是一个无法回答的问题 - 每增加一条记录,它就会变慢。
如果您与数据库程序员或管理员交谈,您会得到不同的数字,表明索引查找(O(log2(n))比全表扫描更便宜,但通常答案会在 20 到 100 条记录的范围内。
任何需要解析大量名称(不仅仅是主机名)的 Linux 系统。应该运行 nscd 或类似程序。大多数此类缓存都会自行索引数据,这将消除性能问题……
它没有提供管理复杂/大型数据集的方法 - 如果您的主机有多个 IP 地址,则通过 hosts 文件进行查找将始终返回第一个条目。
答案2
互联网历史——在 1984 年部署 DNS 之前,hosts 文件是唯一用于解析名称的工具,网络上的主机数量并不多——1983 年 2 月时只有 325 个(RFC 847)。1982 年的 HOSTS.TXT 副本(虽然不是机器可读的)互联网历史邮件列表档案甚至还有一个替代的 HOSTS.TXT(杰夫·古德菲洛的)。
答案3
从技术上讲,没有上限。但是,每次 DNS 查找都会访问此文件,所以为什么要让自己处于这种境地呢?
值得一提的是,/etc/hosts
我在我的环境中分发的最大文件是 1,200 行。这对于我管理的应用程序来说效果很好。DNS 在该特定环境中不是一个选项。