web-dev-qa-db-ja.com

DNSサーバー(bind9.2)のキャッシュCPU使用率が非常に高い

1秒あたり最大3,000クエリを取得するキャッシュ専用のDNSサーバーがあります。仕様は次のとおりです。

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

1秒あたり約300の新しいクエリ(キャッシュにはありません)。

バインドは、シングルスレッド構成の1つのコアで常に100%を使用します。マルチスレッドに再コンパイルした後、2つのコアでほぼ200%を使用します:( iowaitはなく、sysとuserのみです。検索しましたが、バインドがCPUをどのように使用するかについての情報は見つかりませんでした。なぜボトルネックになるのですか?

もう1つ、ここに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で停止します。毎秒キャッシュされたクエリがないため、理論的にはRAMは使い果たされる必要がありますが、そうではありませんでした。

何か考えはありますか?

TIA、

-Gk

3
Gk.

どのバージョンのBINDを使用していますか? Bind 9.5より前のバージョンには、高負荷でのスケーラビリティの問題が知られています。 https://www.dns-oarc.net/files/dnsops-2007/Graff-BIND9-cache.pdf を参照してください。

その上:

  • サーバーをDoSで開く場合を除いて、max-cache-sizeを0に設定しないでください
  • キャッシュがとる最大サイズは、常に実際のレコードのTTLにバインドされます

dnscache のdnscacheを使用してサイドテストを実行することをお勧めします。インストールには10分かかり、調整と保守が非常に簡単で、予測可能なパフォーマンスがあります。

2
michele

nbound を使用すると、パフォーマンスが大幅に向上する可能性があります。 BINDをキャッシング再帰サーバーとしてのみ使用していて、構成に特別なことは何もない場合、Unboundへの切り替えは非常に簡単です。

0
snap

そのクラスのサーバーの3kqpsは、raw I/Oおよびメモリ帯域幅の観点からは比較的少量です。信頼できるサーバーであれば、20kに近づくことができると思います。

そうは言っても、BIND 9.4.2はoldです。独自にロールするか、RHEL以外のRPMを使用できる場合は、代わりにBIND 9.7.xを試して、パフォーマンスの問題が解決するかどうかを確認する必要があります。

また、2GBを超えるRAMを使用するには、x86ではなく64ビットモードのx64で実行する必要があります。

0
Alnitak

興味深い問題...見たことがないbind 100%CPUを使用しているが、クイック検索で 非常に興味深いページ 問題の解決に役立つ可能性があることが判明...問題がどのように変わるか教えてくださいでる。結果を知りたいです。

0
solefald