Возможная утечка памяти DNS-сервера

Вопрос или проблема

У меня есть физический сервер на 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-запросов.

Возможные причины высокой загрузки памяти

  1. Утечка памяти: Утечка памяти может быть связана с ошибками в коде DNS-сервера Windows. Это может привести к тому, что разрешенное DNS-имя не освобождает память, что в конечном итоге приводит к исчерпанию доступной оперативной памяти.

  2. Неправильные настройки: Неверные настройки, такие как слишком большой размер пула сокетов, могут увеличить потребление памяти.

  3. Нагрузка на сервер: Количество DNS-запросов, равное 40-100 в секунду, может быть на пределе возможностей сервера с 8 ГБ ОЗУ и 2 vCPU. Это может вызвать задержки в выполнении запросов и, как следствие, зависания.

Решения и рекомендации

  1. Установка обновлений: Рекомендуемым шагом является установка соответствующих обновлений от Microsoft, которые могут помочь в устранении утечки памяти. В частности, вы можете обратить внимание на данный хотфикс, который предназначен для решения проблемы с памятью в службе DNS на серверах Windows Server 2012 R2. Перед установкой обязательно убедитесь, что у вас установлено обновление, упомянутое в документации.

  2. Проверка и настройка размера пула сокетов: Вы можете проверить текущий размер пула сокетов с помощью команды:

    dnscmd.exe /info /socketpoolsize

    Если размер составляет 2500, попробуйте уменьшить его, например, до 1000 или 512, но имейте в виду, что это может повлиять на способность сервера обрабатывать большой объем трафика:

    dnscmd.exe /config /socketpoolsize 1000
  3. Мониторинг и анализ логов DNS: Внимательно просмотрите логи DNS, чтобы определить, какие запросы могут вызывать чрезмерное потребление ресурсов. Это может включать анализ частоты входящих запросов и идентификацию аномалий.

  4. Оптимизация инфраструктуры: Рассмотрите возможность увеличения ресурсов сервера или распределения нагрузки на несколько серверов DNS для повышения общей производительности.

  5. Регулярное обновление и обслуживание: Поддерживайте обновление системы, регулярно проверяя наличие новых патчей и обновлений от Microsoft, которые могут содержать важные исправления для улучшения стабильности сервиса.

Заключение

Проблема с утечкой памяти в процессе dns.exe на Windows Server 2012 R2 может быть решена путем применения вышеупомянутых рекомендаций и постоянного мониторинга системных ресурсов. Устранение утечек памяти и оптимизация конфигурации сервера помогут повысить его производительность и улучшить опыт пользователей при разрешении имен.

Оцените материал
Добавить комментарий

Капча загружается...