Вопрос или проблема
У меня есть физический сервер на Windows Server 2012 R2, работающий с ролями AD DS и DNS. Очень часто процесс сервера DNS начинает потреблять много памяти.
В Диспетчере задач > Подробности > Анализ цепочки ожидания
– я вижу следующее сообщение:
“Одна или несколько потоков dns.exe ждут завершения сетевого ввода-вывода.“
Если я затем запускаю Process Explorer – я вижу множество потоков:
Из-за вышеуказанной проблемы пользователи испытывают проблемы с разрешением имен.
Как только служба DNS Server перезапускается – проблема исчезает на некоторое время.
Существует ли известное решение этой проблемы?
UPD1:
Сервер имеет 8 ГБ оперативной памяти и 2 vCPU.
Процесс сервера DNS использует 1.7 ГБ оперативной памяти и 40-60% ЦП.
Количество запросов DNS варьируется от 40 до 100 в секунду.
Вот статистика за последние 2,5 часа:
Похоже, что это исправление может помочь вам
https://support.microsoft.com/en-us/kb/3082532
Предположим, вы используете службы DNS Microsoft на компьютерах с Windows Server 2012 R2 в лесу Active Directory. Вы замечаете, что служба DNS на серверах DNS на базе Windows Server 2012 R2 потребляет все больше памяти, и затем происходит утечка памяти. Кроме того, утечки памяти от DNS могут повлиять на производительность других компонентов, служб и приложений, которые работают на том же компьютере.
Исправление DNS имеет этот предварительный условие
https://support.microsoft.com/en-us/kb/2919355
У меня есть аналогичная проблема. dns.exe
(сервер DNS) в Windows Server 2019 потребляет более 686 МБ. Для нормального использования это будет огромным объемом.
Мой сервер был подключен к 7 сетевым адаптерам, поэтому каждое открытое соединение и сокет могут потреблять дополнительную память.
Сначала проверьте размер пула сокетов, используя cmd или PowerShell (от имени администратора):
dnscmd.exe /info /socketpoolsize
пример вывода: Dword: 2500 (000003E8)
Я изменил на 1000, вы можете изменить на 512, это может помочь уменьшить использование памяти, но имейте в виду, что это может повлиять на способность сервера обрабатывать большой объем трафика.
dnscmd.exe /config /socketpoolsize 1000
Если использование памяти остается высоким после этих корректировок, может быть полезно просмотреть логи DNS.
Ответ или решение
Возможная утечка памяти DNS-сервера: Анализ и решение проблемы
Введение
Ваша ситуация с высоким использованием памяти процессом dns.exe
на сервере Windows Server 2012 R2, выполняющем роли Active Directory Domain Services (AD DS) и DNS, является распространенной проблемой, с которой сталкиваются администраторы ИТ-управления. В данном ответе мы проанализируем основную проблему, возможные причины утечки памяти и шаги для её решения.
Описание проблемы
По вашему описанию, процесс dns.exe
значительно увеличивает использование памяти, иногда достигая 1.7 ГБ, что негативно сказывается на производительности сервера и приводит к проблемам с разрешением имен у пользователей. Сообщение в "Диспетчере задач" о том, что один или более потоков dns.exe
ожидают завершения сетевого ввода-вывода, также указывает на возможные проблемы в обработке DNS-запросов.
Возможные причины высокой загрузки памяти
-
Утечка памяти: Утечка памяти может быть связана с ошибками в коде DNS-сервера Windows. Это может привести к тому, что разрешенное DNS-имя не освобождает память, что в конечном итоге приводит к исчерпанию доступной оперативной памяти.
-
Неправильные настройки: Неверные настройки, такие как слишком большой размер пула сокетов, могут увеличить потребление памяти.
-
Нагрузка на сервер: Количество DNS-запросов, равное 40-100 в секунду, может быть на пределе возможностей сервера с 8 ГБ ОЗУ и 2 vCPU. Это может вызвать задержки в выполнении запросов и, как следствие, зависания.
Решения и рекомендации
-
Установка обновлений: Рекомендуемым шагом является установка соответствующих обновлений от Microsoft, которые могут помочь в устранении утечки памяти. В частности, вы можете обратить внимание на данный хотфикс, который предназначен для решения проблемы с памятью в службе DNS на серверах Windows Server 2012 R2. Перед установкой обязательно убедитесь, что у вас установлено обновление, упомянутое в документации.
-
Проверка и настройка размера пула сокетов: Вы можете проверить текущий размер пула сокетов с помощью команды:
dnscmd.exe /info /socketpoolsize
Если размер составляет 2500, попробуйте уменьшить его, например, до 1000 или 512, но имейте в виду, что это может повлиять на способность сервера обрабатывать большой объем трафика:
dnscmd.exe /config /socketpoolsize 1000
-
Мониторинг и анализ логов DNS: Внимательно просмотрите логи DNS, чтобы определить, какие запросы могут вызывать чрезмерное потребление ресурсов. Это может включать анализ частоты входящих запросов и идентификацию аномалий.
-
Оптимизация инфраструктуры: Рассмотрите возможность увеличения ресурсов сервера или распределения нагрузки на несколько серверов DNS для повышения общей производительности.
-
Регулярное обновление и обслуживание: Поддерживайте обновление системы, регулярно проверяя наличие новых патчей и обновлений от Microsoft, которые могут содержать важные исправления для улучшения стабильности сервиса.
Заключение
Проблема с утечкой памяти в процессе dns.exe
на Windows Server 2012 R2 может быть решена путем применения вышеупомянутых рекомендаций и постоянного мониторинга системных ресурсов. Устранение утечек памяти и оптимизация конфигурации сервера помогут повысить его производительность и улучшить опыт пользователей при разрешении имен.