У меня есть 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 .
Кроме:
Я рекомендую вам выполнить побочный тест с 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, но быстрый поиск оказался очень интересная страница это может помочь вам решить проблему ... Дайте мне знать, как это выяснится. Мне интересно узнать результат.