cachingDNS服务器(bind9.2)CPU使用率如此之高

我有一个caching,只有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状态:recursion客户端:666/4900/5000

每秒约300个新的查询(不在caching中)。

绑定总是在单线程configuration的一个核心上使用100%。 在我重新编译到multithreading后,它在两个核心上使用了近200%:(没有iowait,只有sys和user)我四处search,但是没有看到关于如何绑定使用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,以确保绑定可以使用尽可能多的RAM,但它总是停在〜2GB。 因为每秒我们都没有caching查询,所以理论上RAM必须耗尽,但事实并非如此。

你有什么主意吗?

TIA,

-gk

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

除了:

  • 除非要将服务器打开到DoS,否则不要将max-cache-size设置为0
  • 您的caching所占用的最大大小始终与实际logging的TTL绑定

我build议你用dnscache执行dnscache的小testing,安装需要10分钟,调整和维护非常简单,性能可预测。

有趣的问题…从来没有看到bind使用100%的CPU,但快速search成为一个非常有趣的网页 ,可能会帮助您解决问题…让我知道它是如何结果。 我有兴趣知道结果。

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

也就是说,BIND 9.4.2是旧的 。 如果您可以推出自己的产品,或者使用非RHEL RPM,那么您应该尝试使用BIND 9.7.x来查看是否解决了性能问题。

此外,要使用2GB以上的内存,您需要以64位模式运行在x64上,而不是使用x86。

Unbound你可能会获得更好的性能。 如果您仅将BIND用作cachingrecursion服务器而没有特别的configuration,则切换到Unbound将非常容易。