Поделиться через


Устранение неполадок с производительностью кэша и диспетчера памяти

До Windows Server 2012 две основные потенциальные проблемы привели к росту системного кэша файлов до тех пор, пока доступная память не была почти истощена в определенных рабочих нагрузках. Когда эта ситуация приводит к вялости системы, можно определить, сталкивается ли сервер с одной из этих проблем.

Счетчики для мониторинга

  • Память\долгосрочное время существования резервного кэша (s) < 1800 секунд

  • Memory\Available (в байтах, KBytes или MBytes)

  • Memory\System Cache Resident Bytes

Если объем памяти\Доступные байты низкий, и в то же время память\резидентные байты кэша системы потребляет значительную часть физической памяти, вы можете использовать RAMMAP , чтобы узнать, для чего используется кэш.

Системный кэш файлов содержит структуры данных метаданных NTFS

Эта проблема обозначается большим количеством активных страниц метафайлов в выходных данных RAMMAP, как показано на следующем рисунке. Эта проблема может наблюдаться на занятых серверах с доступом к миллионам файлов, что приводит к кэшированию метаданных NTFS, не освобождаемых из кэша.

представление rammap

Проблема, используемая для устранения средства DynCache . В Windows Server 2012+, архитектура была изменена, и эта проблема больше не должна существовать.

Системный кэш файлов содержит сопоставленные с памятью файлы

Эта проблема указывает на большое количество активных сопоставленных файловых страниц в выходных данных RAMMAP. Обычно это означает, что некоторые приложения на сервере открывают множество больших файлов с помощью API CreateFile с FILE_FLAG_RANDOM_ACCESS набором флагов.

FILE_FLAG_RANDOM_ACCESS Флаг — это указание для диспетчера кэша, чтобы сохранить сопоставленные представления файла в памяти как можно дольше (пока диспетчер памяти не сигнализирует о низком состоянии памяти). В то же время этот флаг указывает диспетчеру кэша отключить предварительное получение данных файла.

Эта ситуация была устранена в некоторой степени путем улучшения обрезки набора рабочих наборов в Windows Server 2012+, но сама проблема должна быть в основном устранена поставщиком приложений, не используя FILE_FLAG_RANDOM_ACCESS. Альтернативным решением для поставщика приложений может быть использование низкого приоритета памяти при доступе к файлам. Это можно сделать с помощью API SetThreadInformation . Страницы, к которым обращаются с низким приоритетом памяти, удаляются из рабочего набора более агрессивно.

Диспетчер кэша, начиная с Windows Server 2016, дополнительно устраняет это, игнорируя FILE_FLAG_RANDOM_ACCESS при принятии решений обрезки, поэтому он обрабатывается так же, как и любой другой файл, открытый без FILE_FLAG_RANDOM_ACCESS флага (Диспетчер кэша по-прежнему учитывает этот флаг, чтобы отключить предварительную выборку данных файла). Вы по-прежнему можете вызвать большой объем системного кэша, если у вас есть большое количество файлов, открытых с помощью этого флага, и доступ к ним по-настоящему случайным образом. Настоятельно рекомендуется FILE_FLAG_RANDOM_ACCESS не использовать приложения.

Порог грязной страницы удаленного файла постоянно превышается

Эта проблема указывается, если система испытывает случайные замедления во время записи из удаленного клиента. Эта проблема может возникать, когда большой объем данных записывается из быстрого удаленного клиента в место назначения медленного сервера.

До Windows Server 2016 в таком сценарии, если достигнуто пороговое значение грязной страницы в кэше, дальнейшие операции записи будут вести себя так, как если бы произошла запись. Это может привести к сбросу большого объема данных на диск, что может привести к длительным задержкам, если хранилище медленно, в результате чего время ожидания для удаленного подключения.

В Window Server 2016 и переадресации применяется устранение рисков, чтобы снизить вероятность времени ожидания. Реализовано отдельное пороговое значение грязной страницы для удаленных операций записи, и встроенный сброс будет выполнен при превышении. Это может привести к случайным замедлениям во время интенсивной записи, но устраняет риск времени ожидания в большинстве случаев. Это пороговое значение удаленной грязной страницы составляет 5 ГБ на файл по умолчанию. Для некоторых конфигураций и рабочих нагрузок другое число лучше.

Если размер по умолчанию 5 ГБ не работает хорошо для вашей конфигурации, рекомендуется попытаться увеличить ограничение в 256 МБ до тех пор, пока производительность не будет удовлетворительной. Обратите внимание на такие моменты:

  • Перезагрузка требуется для внесения изменений в этот раздел реестра, чтобы вступил в силу.

  • Единицы RemoteFileDirtyPageThreshold — это количество страниц (размер страницы, управляемый диспетчером кэша). Это означает, что оно должно быть задано на нужный размер в байтах, разделенное на 4096.

  • Рекомендуемые значения: 128 МБ <= N <= 50 % доступной памяти.

  • Это пороговое значение можно отключить полностью, задав для него значение -1. Это не рекомендуется , так как это может привести к истечении времени ожидания для удаленных подключений.

Например, если вы хотите задать ограничение на 10GiB, равное 10 737 418 240 байт / 4096 = 2 621 440, которое является десятичным значением DWORD 2621440.

Это пороговое значение можно контролировать с помощью следующего значения реестра.

  • Ключ: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
    • Тип: DWORD
    • Имя значения: RemoteFileDirtyPageThreshold
    • Данные значений: Десятичное число страниц (размер страницы, управляемый диспетчером кэша).