Уменьшить использование памяти «метафайла»?

8

Мой рабочий компьютер (64-битная Windows 7) тратит много времени на обмен памяти, когда я переключаюсь между программами. Это меня удивляет, так как у меня 4 ГБ ОЗУ, и программы, которыми я пользуюсь, не особенно требовательны к ОЗУ (Outlook, Emacs, p4win, Firefox, различные инструменты сборки). Я скачал RAMMap , и он показывает более гигабайта памяти, используемой "Метафайлом".

Из блога Sysinternals :

Метафайл является частью системного кэша и состоит из метаданных NTFS. Метаданные NTFS включают в себя MFT, а также другие различные файлы метаданных NTFS. ... В MFT каждая запись атрибута файла занимает 1 КБ, и каждый файл имеет хотя бы одну запись атрибута. Добавьте к этому другие файлы метаданных NTFS, и вы поймете, почему категория Metafile может стать довольно большой на серверах с большим количеством файлов.

Итак, я понимаю, что такое данные «метафайла» ... Я работаю над большими сборками, содержащими сотни тысяч файлов (ни один из них не такой большой, но они составляют несколько гигабайт). У меня вопрос, как я могу уменьшить количество памяти, используемой метафайлом? Я не активно использую все эти файлы одновременно, так почему Windows должна хранить информацию в оперативной памяти? Перезапуск компьютера при каждой синхронизации новой сборки действительно раздражает.

Джей Конрод
источник
4
Сборки требуют интенсивного ввода-вывода, и поэтому Windows сохраняет большой кэш файловой системы для повышения производительности. К сожалению, инструменты сборки также используют много памяти и, как правило, с большими всплесками, что, вероятно, вызывает затопление. Как это конкурирует с системным кешем. Лучшее решение может быть добавить больше памяти.
tgiphil
@ tgiphil, понятно, что при проверке или создании сборки используется много памяти. Тем не менее, он все еще используется и все еще вызывает побои намного позже, когда я просто работаю в небольшой области. К сожалению, это не даст мне больше памяти.
Джей Конрод
Я думаю, что Windows 7 уже оптимизирует вашу производительность с помощью кэширования. Чтобы увеличить доступную память и уменьшить объем подкачки, закройте все ненужные приложения. Вы можете получить хороший кусок памяти обратно, закрыв, например, Outlook и Firefox. Если вы используете Visual Studio и вам нужно только скомпилировать, попробуйте выполнить сборку из командной строки. Надеюсь, это поможет. КСТАТИ. С такой низкой памятью (6 Гб под $ 100) это отличная инвестиция в производительность.
tgiphil

Ответы:

4

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

Ваша 64-битная система распределяет видеопамять на первые 4 ГБ памяти. Поэтому, если у вашей видеокарты много памяти, эта память теряется, как описано в разделе :
Используемая память может быть меньше установленной памяти на компьютерах под управлением Windows 7

Вы можете проверить использование памяти на компьютере, открыв Диспетчер устройств и в меню «Вид» выбрать «Ресурсы по соединению». Разверните узел «Память» и посмотрите, сможете ли вы выяснить, что занимает память. В некоторых случаях объем памяти можно увеличить, отключив неиспользуемые устройства, например FireWire.

Вы также можете попробовать сделать прямо противоположное тому, что описано в этой статье:
Увеличить размер кэша памяти файловой системы в Windows 7

Вы также можете попробовать отключить Windows 7 SuperFetch .

Если ничего не помогает, было бы полезно опубликовать снимок экрана с вкладкой «Диспетчер задач» под названием «Производительность».

harrymc
источник
+1 для «Отключить Superfetch».
Никакого снижения рейтинга, но Superfetch, скорее всего, увеличивает его производительность, а не снижает ее, поскольку исполняемые файлы сборки обычно выполняются часто и выигрывают от кэширования. Что касается видеокарты, влияющей на доступную память, она не применима в Windows 7 64bit только с 4Gb. В этом случае видеокарта будет отображаться выше 4 Гб.
tgiphil
@tgiphil: Из цитированной выше статьи Microsoft: «видеокарта с 256 МБ встроенной памяти должна отображать эту память в первые 4 ГБ адресного пространства».
Harrymc
В моей организации также есть тонны маленьких файлов и огромный метафайл NTFS в оперативной памяти. Из того, что я могу сказать, Windows не кэширует метафайл, как все остальное, и никогда не выпускает его из оперативной памяти. Компьютер будет использовать до 100% памяти, а затем все ваши приложения будут зависать из-за нехватки памяти. Конечно, это не Windows 7, это Windows Server 2008 R2.
Фил
Также ссылка «Увеличить кэш памяти файловой системы» советует вещи, которые на самом деле не работают. См. Tweakhound.com/blog/?p=1164
Фил
0

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 ГБ оперативной памяти.

BeowulfNode42
источник