nscdのキャッシュヒット率を向上させるには?

nscdのキャッシュヒット率を向上させるには?

私の目標:nscdが利用可能なメモリを持っているので、余分なメモリにかなりの規模のDNSキャッシュを維持するようにしてください。

説明する:

私は広く分散していますが、非常に繰り返しユーザーベースのWebサーバーを持っています。十分なメモリがあるため、クエリをキャッシュして応答時間を向上させることができると思いましたが、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項目のみキャッシュすることです。を実行すると、strings /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

Webサーバーのどの部分がDNSルックアップを実行していますか?ほとんどのWebサーバー構成は、着信ユーザーごとにリバースDNSルックアップを明示的に無効にします(DNSはしばしば遅いため)。

Patrickが指摘したように、nscdは正しいことをしており、正のTTL値を尊重します。はい、上書きできます(unboundこれを簡単に実行できます。修正するだけです。server.cache-min-ttl同じ理由で1時間以上に増やすと警告が表示されます)。ただし、あなたのクエリは通常、TTLが長い傾向があるrDNSである可能性が高いです。

また、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

おすすめ記事