/ etc / hosts的大小限制(Linux)


11

在您可能开始发现性能下降之前,是否有人碰巧知道Linux系统上/ etc / hosts的理论大小限制?

此外,有人可以指出某些预期限制的官方消息吗?


8
这使我认为您在最佳实践之外正在做一些疯狂的事情。有什么细节
ewwhite

3
当然,在这里部署轻量级DNS解析器似乎是一个更好的解决方案。
Zoredache

1
我有一个要求这个的客户。我希望找到一些文档,向他们展示为什么这会引起问题;不必在测试机上尝试并演示它。
MikeP90 '16

1
hosts文件是1970年代和1980年代初期DNS之前的遗物。有数以百计的hosts文件条目被认为是一个坏主意,远远回来。如果您的条目中有10个以上,则可能是走错了路。
迈克尔·汉普顿

Answers:


9

使用来源 Mike。

解析器在文本文件中使用线性搜索来查找条目。这是一个没有索引的数据库。因此,在没有附加缓存功能的情况下,查找的成本为O(n)。至于何时会导致性能下降,这是一个无法回答的问题-每条记录的速度都会变慢。

如果您与数据库程序员或管理员交谈,则在索引查找(O(log2(n))会比全表扫描便宜的时候,您会得到不同的数字,但是通常答案在20左右到100条记录。

任何需要解析很多名称(不仅仅是主机名)的linux系统。应该运行nscd或类似的。大多数此类缓存会自行索引数据,这将消除性能问题,但是...

它没有提供管理复杂/大型数据集的方法-如果您的主机具有多个IP地址,则通过hosts文件进行的查找将始终返回第一个条目。


1
为了结束循环,我们向主机文件添加了170万条记录,并估计每次查找都增加了0.5秒。在这种环境下,.5秒可以忽略不计。我认为DNS服务器仍然是更好的解决方案,但是客户想要客户想要的。
MikeP90 '16


3

从技术上讲,没有上限。但是,每次DNS查找都将命中该文件,那么为什么要对此保持开放?

就其价值而言,/etc/hosts我在环境中分发的最大文件为1,200行。这对于我正在管理的应用程序来说效果很好。在该特定环境中,DNS不是一个选择。


让我们换一种说法。如果内核中没有索引,则每次命中都将进行线性搜索,这将取决于时间范围内的缓存大小。
Deer Hunter

4
我使用互联网上流行的主机文件,共有15,430行,而且我注意到网络冲浪性能没有真正的下降。
伯特2016年

@DeerHunter我认为Unix内核中没有执行主机名查找的任何内容。
Barmar

对伯特的笔记+1。我只是使用了一个包含22,000行的自定义文件,它并没有影响性能。这对于测试很有用!
乔什·科尼希
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.