Разбираемся в причинах высокой загрузки оперативной памяти метафайлом на файловых серверах Windows | Windows для системных администраторов

Проблема высокой загрузки памяти системным файловым кэшем на Windows Server 2008 R2

На одном из файловых серверов под управлением Windows Server 2008 R2 обнаружилась проблема с высокой загрузки оперативной памяти (RAM), выливающаяся  в проблемы с производительностью сервера и запущенных на нем служб. Как оказалось, память забивалась системным файловым кэшем с метаданными файловой системы. Проблеме потенциально подвержены все файловые сервера с большим количеством файлов, к которым обращаются пользователя. Наиболее критична проблема для  64 битных версий Windows, на которых размер метафайла в памяти может занять практически всю емкость установленной оперативной памяти. В статье разберемся как проявляется проблема, выявим ее источники и способы решения.

Высокая загрузка оперативной памяти на файловом сервере Windows


Проблема проявляется следующим образом: в диспетчере задач (Task Manager) видим, что на сервере оперативная память занята на 95-99%.

Высокая загрузка памяти на файловом сервере Windows Server 2008 R2Перейдя на вкладку процессов, не удастся найти какой-то утекший процесс с аномально высоким потреблением памяти. Кроме того, если навскидку сложить память, занятую всеми процессами, отображаемыми в диспетчере задач, даже близко не удается приблизиться к 50% физической памяти, установленной на сервере. Так кто же съел всю память?

Потребление памяти процессамиРеальный расклад по использованию оперативной памяти может дать утилита RAMMap (Марка Руссиновича). Качаем архив с утилитой и  запускаем из архива файл RAMMap.exe с правами администратора. На вкладке Use Counts, видим, что больше всего физической памяти использует объектом Metafile (в нашем случае на него приходится 11 из 25 Гб оперативной памяти сервера).

Утилита rammap - метафайл в памяти (metafile)

Что такое метафайл в Windows?


Метафайл (Metafile) — это часть системного кэша, который содержит метаданные файловой системы NTFS и используется для увеличения быстродействия файловой системы при доступе к файлам. Метаданные NTFS включают в себя данные таблицы MFT (Master File Table). Для каждого файла/папки, к которому обращались пользователи, в метафайле создается  соответствующий блок, размером как минимум 1 Кб (запись об атрибуте каждого файла занимает 1кб, и каждый файл имеет как минимум один атрибут). Таким образом, на файловых серверах с большим количеством файлов, к которым идут постоянные обращения, размер системного кэша NTFS (метафайла) может достигать нескольких гигабайт.

Отключить этот кэш или управлять им с помощью стандартных средств Windows не получится. Как решение, можно увеличить количество памяти на сервере, но реализуемо это далеко не всегда.

Если перезагрузить сервер, память используемая метафайлом освобождается, но со временем размер метафайла в памяти все равно начинает неконтролируемо расти.

К примеру, оценить размер MFT таблицы  можно с помощью еще одной утилиты Руссиновича – ntfsinfo. К примеру, в нашем примере для 2 Тб диска размер MFT таблицы составляет 13 Гб.

ntfsinfo

Быстрая очистка метафайла MFT в памяти

Утилита RAMMap предоставляет возможность быстрой очистки используемой памяти от мусора без необходимости перезагрузки сервера. Для этого нужно в меню выбрать раздел Empty -> Empty System Working Set. RAMMAP Empty System Working SetПосле этой операции размер памяти под metafile уменьшился  в десятки раз, а процент использования RAM сервером упал  с 95% до 26%.

Использование памяти уменшилось за счет очистки метафайла ntfsОсновной недостаток такого метода – процесс очистки ручной и никак не автоматизируется.

Служба Dynamic Cache Service для управления файловым кэшем

Другим, более кардинальным, решением проблемы высокой загрузки оперативной памяти метафайлом файловой системы является установка службы  Dynamic Cache Service (http://www.microsoft.com/en-us/download/details.aspx?id=9258). Данная служба через системные API позволяет управлять параметрами выделяемого кэша.

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

Установка DynCache довольно простая (подробные инструкции есть в архиве с программой).

  1. Копируем файл в DynCache.exe в каталог  %SystemRoot%\System32
  2. Создадим службу DynCache командойsc create DynCache binpath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"Установка службы DynCache в Windows Server 2008 R2
  3. Импортируем файл DynCache.reg в реестр (содержит дефолтные значения)
  4. Изменим значения следующих ключей реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters
    • MaxSystemCacheMBytes: 4096  (dec) – максимальный размер кэша
    • MinSystemCacheMBytes: 100 (dec) – минимальный размер

    Параметры DynCache в реестре

    Примечание. Эти и другие параметры службы DynCache нужно отрегулировать в соответствии с количеством установленной памяти и нагрузкой на сервер, требуемой производительности и  т.д. Как правило, не стоит задавать размер кэша больше, чем половина установленной на сервере RAM. После внесения изменения службу DynCache перезапускать не нужно, т.к. изменения отслеживаются динамически.
  5. Запустим службу командой sc start DynCache
Примечание. Если понадобится удалить службу, воспользуйтесь инструкцией.

В нашем случае, после установки службы DynCache, использование памяти метафайлом перестало превышать заданного нами значения 4 Гб. Пользователи каких-либо проблем с ухудшением производительности файлового сервера не выявили.

Еще записи по теме: Windows Server 2008
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

Комментариев: 3

Оставить комментарий
  1. Adminny | 21.03.2016

    Поделюсь результатами на терминальном сервере.
    До http://imgur.com/kEYgOKi
    После http://imgur.com/RaacJdf
    Большое освобождение памяти происходит за счёт Mapped File.

    Ответить
    • itpro | 22.03.2016

      Mapped File, — это закешированные в памяти файлы, дающие увеличения I/O приложениям. Как правило, они автоматически вычищаются из памяти, не вызывая проблем с перерасходом RAM. Metafile более капризен в этом плане, и не отдает без боя захваченную память. Это вызывает проблемы на файловых и нагруженных веб серверах (под Windows)
      Думаю в вашем случае через пару тройку часов размер кэша Mapped File опять вернется к начальным значениям.

      Ответить
  2. Андрей | 19.05.2016

    Не стартует служба, ошибка 216: 0xd8
    ((

    Ответить
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.25MB/0.00188 sec