У нас есть сервер Windows Server 2008R2 с 32 ГБ оперативной памяти и ~ 1000000 объектов файловой системы на 15 ТБ памяти. Уровень использования очень низкий (поддерживается только 2 разработчика), поэтому сохранение содержимого файла в кэше (Mapped File) совсем не важно, но быстрый доступ к метаданным файла (Metafile) очень важен. Поведение сервера кажется прямо противоположным. Распределение сопоставленных файлов расширяется, чтобы использовать всю доступную память, в то время как метафайл, кажется, часто очищается.
Пример. После запроса свойств (выберите корневые папки -> Свойства) размер метафайла увеличивается до ~ 750 МБ (отлично!). Однако, когда я делаю то же самое через час или два, выделение метаданных упало до ~ 300 МБ и происходит полное повторное сканирование диска (1-2 минуты, не очень хорошо!).
Как сохранить в кеше содержимое метафайла?
Графика вывода RamMap здесь - http://i.imgur.com/X1EOskf.jpg
Вы можете попробовать увеличить минимальный размер кэша системных файлов, изменив мой скрипт powershell здесь, при ошибке сервера вставив строку непосредственно перед
$status = [MyTools.cache]::Set( $SFCMin, $NewMax, $SFCFlags ) # calls the c# routine that makes the kernel API call
и измените установленную строку, чтобы не уменьшать максимум, поэтому она читает
$SFCMin = 1 * $GiB
$status = [MyTools.cache]::Set( $SFCMin, $SFCMax, $SFCFlags ) # calls the c# routine that makes the kernel API call
чтобы установить минимальный кеш, в котором хранятся данные метафайла, равным 1 ГиБ.
Обратите внимание, что кто-то еще обнаружил, что минимум должен быть не менее 64 KiB меньше максимального. Максимальное значение по умолчанию - 1 TiB.
Вам также действительно следует выяснить, что вызывает около 21 ГБ активной памяти «Driver Locked».