缓存 DNS 服务器 (bind9.2) CPU 使用率太高了

缓存 DNS 服务器 (bind9.2) CPU 使用率太高了

我有一个仅缓存的 DNS 服务器,每秒可接收约 3k 个查询。规格如下:

Xeon dual-core 2,8GHz 4GB of RAM
Centos 5x (kernel 2.6.18-164.15.1.el5PAE) 
bind 9.4.2

rndc 状态:递归客户端:666/4900/5000

每秒大约有 300 个新查询(不在缓存中)。

Bind 在单线程配置下总是在一个核心上使用 100%。在我将其重新编译为多线程后,它在两个核心上使用率接近 200% :( 没有 iowait,只有 sys 和 user。我搜索了一下,但没有看到任何关于 bind 如何使用 CPU 的信息。为什么它会成为瓶颈?

还有一件事,这是 RAM 使用情况:

cat /proc/meminfo 
MemTotal:      4147876 kB
MemFree:       1863972 kB
Buffers:        143632 kB
Cached:         372792 kB
SwapCached:          0 kB
Active:        1916804 kB
Inactive:       276056 kB

我将 max-cache-size 设置为 0,以确保 bind 可以使用尽可能多的 RAM,但它总是停在 ~2GB。由于我们每秒都会收到未缓存的查询,因此理论上 RAM 一定已耗尽,但事实并非如此。

你有什么主意吗?

短暂性脑缺血发作,

—Gk

答案1

您使用的是哪个版本的 BIND?Bind 9.5 之前的版本已知在高负载下存在可扩展性问题,请参阅https://www.dns-oarc.net/files/dnsops-2007/Graff-BIND9-cache.pdf

除了:

  • 永远不要将 max-cache-size 设置为 0,除非你想让你的服务器遭受 DoS 攻击
  • 缓存占用的最大大小始终与实际记录的 TTL 绑定

我建议你使用 dnscache 进行侧面测试域名缓存,安装只需10分钟,调整和维护极其简单,并且性能可预测。

答案2

有趣的问题...从未见过bind使用 100% CPU,但快速搜索结果显示非常有趣的页面这可能会帮助你解决问题...让我知道结果如何。我很想知道结果。

答案3

对于该类服务器来说,3k qps 在原始 I/O 和内存带宽方面相对较低 - 如果它是权威服务器,我预计能够接近 20k。

尽管如此,BIND 9.4.2老的。如果您可以自行安装或使用非 RHEL RPM,那么您确实应该尝试 BIND 9.7.x,看看是否能解决您的性能问题。

此外,要使用超过 2GB 的 RAM,您需要在 64 位模式下在 x64 上运行,而不是 x86。

答案4

你可能会得到更好的表现未绑定。如果您仅将 BIND 用作缓存递归服务器,且配置中没有任何特殊内容,则切换到 Unbound 将非常容易。

相关内容