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

Применяется к
Microsoft Windows XP Professional x64 Edition Windows Vista Home Basic Windows Vista Home Premium Windows Vista Business Windows Vista Enterprise Windows Vista Ultimate Windows Vista Home Basic 64-bit Edition Windows Vista Home Premium 64-bit Edition Windows Vista Enterprise 64-bit Edition Windows Vista Ultimate 64-bit Edition Windows Server 2008 Datacenter without Hyper-V Windows Server 2008 Enterprise without Hyper-V Windows Server 2008 Standard without Hyper-V Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 for Itanium-Based Systems Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Enterprise Windows Server 2008 R2 Service Pack 1 Windows Server 2008 R2 Standard

Проблема

Проблемы с производительностью в приложениях и службах в различных версиях Windows XP, Windows Vista, Windows Server 2003, Windows Server 2008 и Windows Server 2008 R2. Кроме того, вы заметили следующие симптомы:

  • Доступная память почти исчерпана.
  • Системный кэш файлов потребляет большую часть физической ОЗУ.
  • Существует непрерывный и большой объем кэшированных запросов на чтение на жесткий диск.

Причина

Управление памятью в операционных системах Microsoft Windows использует алгоритм на основе спроса. Если какой-либо процесс запрашивает и использует большой объем памяти, размер рабочего набора (количество страниц памяти в физической ОЗУ) процесса увеличивается. Если эти запросы являются непрерывными и не заданы, рабочий набор процесса будет потреблять всю физическую память. В этом случае рабочие наборы для всех остальных процессов выстраивается на жесткий диск. Такое поведение снижает производительность приложений и служб, так как страницы памяти постоянно записываются на жесткий диск и считываются с жесткого диска.

Это поведение также применяется к рабочему набору системного кэша файлов. При наличии непрерывного и большого объема кэшированных запросов на чтение от любого процесса или от любого драйвера размер рабочего набора системного файлового кэша будет расти, чтобы удовлетворить этот спрос. Кэш системных файлов потребляет физическую память. Таким образом, достаточный объем физической ОЗУ недоступен для других процессов.

В 32-разрядных версиях операционных систем Microsoft Windows, предшествующих Windows Vista, рабочие наборы системного файлового кэша имеют теоретический предел памяти менее 1 гигабайта (ГБ). Ограничение диапазона виртуальных адресов не позволяет рабочим наборам системного файлового кэша истощить физический объем ОЗУ.

В 32-разрядных версиях операционных систем Windows Vista ресурсы ядра выделяются динамически. Рабочий набор системного файлового кэша увеличивается, чтобы использовать диапазон виртуальных адресов режима ядра за счет других ресурсов ядра. Ограничение этого диапазона памяти составляет менее 2 ГБ. Если на компьютере более 2 ГБ физической ОЗУ, кэш не может истощить всю физическую ОЗУ. Однако кэш может истощить виртуальное адресное пространство в ядре. Это может привести к сбою выделения для других компонентов ядра.

В 64-разрядных версиях операционных систем Windows размер диапазона виртуальных адресов обычно больше физического ОЗУ. В этой ситуации рабочий набор для системного файлового кэша может увеличиться, чтобы потреблять большую часть физической ОЗУ.

Решение

Алгоритмы управления памятью в операционных системах Windows 7 и Windows Server 2008 R2 были обновлены для устранения многих проблем с кэшированием файлов, обнаруженных в более ранних версиях Windows. Существуют только определенные уникальные ситуации, в которых необходимо реализовать эту службу на компьютерах под управлением Windows 7 или Windows Server 2008 R2.

Как определить, затронута ли ваша система

Чтобы определить, влияет ли эта проблема на вашу систему, установите средство SysInternals RamMap. Это средство можно получить на следующем веб-сайте Windows Sysinternals:

http://technet.microsoft.com/en-us/sysinternals/ff700229
При запуске средства выберите параметр Использовать счетчики . Здесь отображается несколько столбцов, показывающих текущий шаблон использования памяти. Щелкните столбец Активные , чтобы отсортировать по количеству используемых байтов, и обратите внимание на основное использование непосредственно под общим числом.

Если в качестве основного числа пользователей используется метафайл и используется большая часть доступной памяти, возникает проблема с системным кэшем файлов, описанная в разделе "Симптомы". Это можно проверить, используя Монитор производительности для отслеживания счетчика байтов резидента памяти и системного кэша и отслеживания непрерывного роста кэша с течением времени.

Рис. 1. Пример выходных данных RamMap, в которых на компьютере возникает проблема.

10214de2-59a3-f4c0-07fb-5f75a3cbcd47

Рис. 2. Пример выходных данных RamMap, в которых на компьютере не возникла проблема.

26eb9766-30fb-0aba-069b-b9f6b636a812

Если счетчик Memory\System Cache Resident Bytes в Монитор производительности показывает тенденцию к увеличению с течением времени, на компьютере возникает проблема, как показано на рис. 3.

Рис. 3. Пример Монитор производительности выходных данных, в которых на компьютере возникает проблема с течением времени.

5a390908-db40-e825-d4fd-348cd86d33eb

Требования к перезапуску

Вам не нужно перезагружать компьютер при установке, удалении или использовании этой службы.

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

  1. Убедитесь, что выходные данные RamMap клиента, данные perfmon или poolmon подтверждают, что кэш системных файлов потребляет большую часть физической ОЗУ, как описано ранее.

  2. Чтобы получить службу динамического кэша Windows, скачайте ее здесь.

  3. Ниже приведены некоторые параметры реестра динамического кэша.

    Файловые серверы, возможно, потребуется использовать 1 ГБ.
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
    "MaxSystemCacheMBytes"=dword:00000400
    "MinSystemCacheMBytes"=dword:00000064
    "SampleIntervalSecs"=dword:0000003c
    "CacheUpdateThresholdMBytes"=dword:00000064

    Exchange 2007, возможно, потребуется попробовать 500 МБ:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
    "MaxSystemCacheMBytes"=dword:000001F4
    "MinSystemCacheMBytes"=dword:00000064
    "SampleIntervalSecs"=dword:0000003c
    "CacheUpdateThresholdMBytes"=dword:00000064

    SQL 2005 и более поздних версий в прошлом при работе с EE SQL использовали 2 ГБ:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
    "MaxSystemCacheMBytes"=dword:000007D0
    "MinSystemCacheMBytes"=dword:00000064
    "SampleIntervalSecs"=dword:0000003c
    "CacheUpdateThresholdMBytes"=dword:00000064

Дополнительные сведения

Чтобы обойти эту проблему, используйте функцию API GetSystemFileCacheSize и функцию API SetSystemFileCacheSize, чтобы задать максимальное или минимальное значение размера для рабочих наборов системного кэша файлов. Использование этих функций является единственным поддерживаемым методом ограничения использования физической памяти кэшем системных файлов.

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

Установка и использование службы динамического кэша Microsoft не приводит к исключению поддержки Microsoft Windows. Эта служба и ее исходный код приведены в качестве примера использования поддерживаемых Майкрософт API для сокращения роста кэша файловой системы.

Службу и исходный код можно получить на следующем веб-сайте Майкрософт:

http://www.microsoft.com/download/details.aspx?FamilyID=e24ade0a-5efe-43c8-b9c3-5d0ecb2f39af&displaylang=en

Дополнительные ресурсы

Ознакомьтесь с главами 9 (управление памятью) и 10 (диспетчер кэша) 5-го выпуска Windows Internals.

УПРАВЛЕНИЕ ПАМЯТЬЮ (ПРОБЛЕМЫ С БОЛЬШИМ СИСТЕМНЫМ КЭШЕМ) Запись блога

Запись блога о проблемах с медленным копированием больших файлов

Ограничения памяти для выпусков Windows

976618 Вы испытываете проблемы с производительностью в приложениях и службах, когда системный кэш файлов потребляет большую часть физической ОЗУ

918483 Уменьшение подкачки памяти буферного пула в 64-разрядной версии SQL Server

895932 , что следует учитывать перед включением режима системного кэша в Windows XP

232271 Оптимизация сервера Windows NT с помощью реестра

837331 о диспетчере кэша в Windows Server 2003 г.

http://technet2.microsoft.com/windowsserver/en/library/EFA621BD-A031-4461-9E72-59197A7507B61033.mspx

Раздел TechNet largeSystemCache

Запись блога RamMap

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».