如何提高nscd的缓存命中率?

如何提高nscd的缓存命中率?

我的目标:让 nscd 在多余的内存中维护一个相当大的 DNS 缓存,因为我有它可用。

描述:

我有一个网络服务器,其用户群分布广泛但重复率高。它有足够的内存,所以我认为我可以通过缓存查找来提高响应时间,但根据nscd -g我的说法,我的缓存命中率只有 6%(这意味着nscd很可能会为缓存引入更多延迟,或者在缓存中查找它永远找不到的条目,而不是通过网络阻止):

hosts cache:

            yes  cache is enabled
            yes  cache is persistent
            yes  cache is shared
            211  suggested size
         216064  total data pool size
           2328  used data pool size
          36000  seconds time to live for positive entries
             20  seconds time to live for negative entries
           4455  cache hits on positive entries
              0  cache hits on negative entries
          17357  cache misses on positive entries
          42348  cache misses on negative entries
              6% cache hit rate
             17  current number of cached values
             40  maximum number of cached values
              3  maximum chain length searched
              0  number of delays on rdlock
              0  number of delays on wrlock
              0  memory allocations failed
            yes  check /etc/hosts for changes

造成 6% 命中率的一个重要因素可能是它只缓存了 17 个条目。执行 astrings /var/db/nscd/hosts表明它创建的主机缓存条目主要针对我们内部网络上的计算机。缓存这些内容是件好事,因为网站的每日重新发布可能会加快,但我的目标是在不进行任何实际配置更改的情况下加快最终用户体验。

这是以下的相关部分nscd.conf

    threads                 10
    server-user             nscd
    debug-level             0
    paranoia                no
    [.....snip......]
    enable-cache            hosts           yes
    positive-time-to-live   hosts           36000
    negative-time-to-live   hosts           20
    suggested-size          hosts           10657
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

基本上,我需要帮助来理解为什么我的主机缓存会如此之小,尽管我已将主机缓存上的正 TTL 设置得非常高。我确信实际缓存条目的数量较少导致命中率如此之低。

我假设命中率为 6%,但我的正 TTL 相当大,这意味着我当前的工作量执行 DNS 主机查找,但它们只是没有被保存。我不知道为什么这些没有被保存,也不知道接下来要检查什么。我所期望的现在将是一个相当大的 DNS 缓存。

即使命中率仍然很小(即:客户没有像我想象的那样频繁重复),我仍然期望那些DNS 查找被缓存,但查看“当前缓存值的数量”,这似乎也没有发生。

答案1

您的网络服务器的哪一部分正在执行 DNS 查找?大多数网络服务器配置明确禁用每个传入用户的反向 DNS 查找,以提高速度(因为 DNS 通常很慢)。

正如 Patrick 指出的那样,nscd 正在做正确的事情并尊重积极的 TTL 值。是的,你可以覆盖它(unbound可以让你轻松地做到这一点,只需修改server.cache-min-ttl,出于同样的原因,有关于将其增加超过 1 小时的警告)。然而,您的查询可能主要是 rDNS,一般来说,它们往往具有较长的 TTL。

此外,由于您的maximum number of cached values流量如此之低,我想指出您几乎没有获得任何流量。

如果您确实关心用户经常重复的位置,我建议将其记录在 nscd 之外,而不必再担心它。

编辑(2013/12//09): nscd -g主机统计数据来自dev.gentoo.org(评论中没有块):

nscd configuration:
 4h  8m 43s  server runtime
hosts cache:
        yes  cache is enabled
         no  cache is persistent
         no  cache is shared
        422  suggested size
    1108744  total data pool size
     966632  used data pool size
        600  seconds time to live for positive entries
         20  seconds time to live for negative entries
      67878  cache hits on positive entries
       2479  cache hits on negative entries
       9464  cache misses on positive entries
       4276  cache misses on negative entries
         83% cache hit rate
       6951  current number of cached values
       7641  maximum number of cached values
         33  maximum chain length searched
          1  number of delays on rdlock
          0  number of delays on wrlock
          0  memory allocations failed
        yes  check /etc/hosts for changes

答案2

这个参数:
是的,缓存是共享的

允许应用程序在 nscd 的缓存中扎根,并且不会记录此类活动。这是预期且最有效的行为。

将其设置为“否”,您会看到命中率急剧上升,但速度会慢一些。

看:http://alpacapowered.wordpress.com/2013/03/08/nscd-dns-caching-and-postfix/comment-page-1/#comment-1374

答案3

它可能有点偏离主题,但nscd您可以切换到sssd(我认为它的继任者)而不是使用。

我在 SUSE Linux Enterprise Server 11.3(完全支持)上使用它,我很高兴我进行了切换。它拥有更多、更细粒度的配置选项,nscd并且具有远远超出所能nscd实现的功能。

至少我认为值得一看:https://fedorahosted.org/sssd/

答案4

nscd 尊重上游 TTL 值。

A如果 google.com 的 DNS 服务器规定记录的TTLgoogle.com为 10 秒,而您的 TTLpositive-time-to-live为 36000,则该记录仍将在 10 秒后过期。

相关内容