Мой рабочий компьютер (64-битная Windows 7) тратит много времени на обмен памяти, когда я переключаюсь между программами. Это меня удивляет, так как у меня 4 ГБ ОЗУ, и программы, которыми я пользуюсь, не особенно требовательны к ОЗУ (Outlook, Emacs, p4win, Firefox, различные инструменты сборки). Я скачал RAMMap , и он показывает более гигабайта памяти, используемой "Метафайлом".
Из блога Sysinternals :
Метафайл является частью системного кэша и состоит из метаданных NTFS. Метаданные NTFS включают в себя MFT, а также другие различные файлы метаданных NTFS. ... В MFT каждая запись атрибута файла занимает 1 КБ, и каждый файл имеет хотя бы одну запись атрибута. Добавьте к этому другие файлы метаданных NTFS, и вы поймете, почему категория Metafile может стать довольно большой на серверах с большим количеством файлов.
Итак, я понимаю, что такое данные «метафайла» ... Я работаю над большими сборками, содержащими сотни тысяч файлов (ни один из них не такой большой, но они составляют несколько гигабайт). У меня вопрос, как я могу уменьшить количество памяти, используемой метафайлом? Я не активно использую все эти файлы одновременно, так почему Windows должна хранить информацию в оперативной памяти? Перезапуск компьютера при каждой синхронизации новой сборки действительно раздражает.
Ответы:
Я считаю, что системный кеш освобождает память при необходимости, но могут возникнуть глюки. Ниже перечислены некоторые возможности.
Ваша 64-битная система распределяет видеопамять на первые 4 ГБ памяти. Поэтому, если у вашей видеокарты много памяти, эта память теряется, как описано в разделе :
Используемая память может быть меньше установленной памяти на компьютерах под управлением Windows 7
Вы можете проверить использование памяти на компьютере, открыв Диспетчер устройств и в меню «Вид» выбрать «Ресурсы по соединению». Разверните узел «Память» и посмотрите, сможете ли вы выяснить, что занимает память. В некоторых случаях объем памяти можно увеличить, отключив неиспользуемые устройства, например FireWire.
Вы также можете попробовать сделать прямо противоположное тому, что описано в этой статье:
Увеличить размер кэша памяти файловой системы в Windows 7
Вы также можете попробовать отключить Windows 7 SuperFetch .
Если ничего не помогает, было бы полезно опубликовать снимок экрана с вкладкой «Диспетчер задач» под названием «Производительность».
источник
Windows Server 2008 R2 сталкивается с точно такой же проблемой «кэша» метафайлов, что слишком много информации метафайлов хранится в активной памяти, поэтому функции кэша не имеют разрешения, позволяющего освободить эту память при нехватке памяти.
Я написал сценарий powershell на странице serverfault.com Использование ОЗУ метафайла в Windows Server 2008 R2 , в котором максимальная активная память метафайла устанавливается на разумное значение. Остальное перемещается в резервную память, и тогда обычные функции кэширования могут соответствующим образом расставлять приоритеты. В Windows 7 x64 и Server 2008 R2 x64 установлены максимальные ограничения активной памяти по умолчанию для данных метафайлов в 1 ТБ. Да, ТБ, а не ГБ.
Сейчас Work запускает этот сценарий на всех наших сайтах на наших серверах, которые организуют резервные копии сайта, которые ежедневно обрабатывают миллионы файлов во время цикла резервного копирования. На этих серверах резервного копирования также работает Java-программа с большим объемом памяти (VMware vSphere), 2 SQL-сервера и WSUS с собственным SQL-сервером. Когда программа резервного копирования сначала считывает метаданные (имя, размер, дату изменения, разрешения, атрибуты и т. Д.), Чтобы определить список файлов, которые будут зарезервированы при передаче, ОЧЕНЬ быстро заполняет кэш метафайлов. Даже делая все это, они путешествуют хорошо только с 4 ГБ оперативной памяти.
источник