Назад | Перейти на главную страницу

Кеширование DNS-сервера (bind9.2) загрузка ЦП настолько высока

У меня есть 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. Я поискал, но не нашел никакой информации о том, как привязка использует CPU. Почему это становится узким местом?

Еще одна вещь, вот использование оперативной памяти:

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 может использовать столько оперативной памяти, сколько захочет, но всегда останавливается на ~ 2 ГБ. Поскольку каждую секунду мы получали не кешированные запросы, теоретически оперативная память должна быть исчерпана, но этого не произошло.

Есть ли у вас какие-либо идеи?

TIA,

-Gk

Какую версию BIND вы используете? Версии до Bind 9.5 имели известные проблемы масштабируемости при высоких нагрузках, см. https://www.dns-oarc.net/files/dnsops-2007/Graff-BIND9-cache.pdf .

Кроме:

  • никогда не устанавливайте max-cache-size равным 0, если вы не хотите открыть свой сервер для DoS
  • максимальный размер, занимаемый вашим кешем, всегда привязан к TTL фактических записей

Я рекомендую вам выполнить побочный тест с dnscache из dnscache, установка занимает 10 минут, чрезвычайно проста в настройке и обслуживании и имеет предсказуемую производительность.

Вы, вероятно, получите гораздо лучшую производительность с Несвязанный. Если вы используете BIND только в качестве кэширующего рекурсивного сервера без ничего особенного в конфигурации, переключиться на Unbound будет очень просто.

3k qps для сервера этого класса - это относительно небольшой объем с точки зрения необработанного ввода-вывода и пропускной способности памяти - я бы ожидал, что смогу приблизиться к 20k, если бы это был авторитетный сервер.

Тем не менее, BIND 9.4.2 является старый. Если вы можете использовать собственные или использовать RPM, отличные от RHEL, вам действительно стоит попробовать BIND 9.7.x и посмотреть, решит ли это ваши проблемы с производительностью.

Кроме того, чтобы использовать более 2 ГБ ОЗУ, вам нужно будет работать на x64 в 64-битном режиме, а не на x86.

Интересная проблема ... Ни разу не видел bind использовать 100% CPU, но быстрый поиск оказался очень интересная страница это может помочь вам решить проблему ... Дайте мне знать, как это выяснится. Мне интересно узнать результат.