Почему не используется файл подкачки?

1401
George21

У меня проблема с Windows Server 2008 R2 Enterprise. Пейджинговый пул загружает память, но не загружает реальный файл подкачки (для этого у меня есть место на диске).

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

Настройка виртуальной памяти:

screen

Удобство использования файла подкачки: screenи использование памяти все еще медленно растет

Производительность диспетчера задач: screen

Диспетчер задач обрабатывает: screen

Карта RAM: screen

Системная информация: screen

3
Но ваш файл подкачки используется. Обратите внимание, что текущий «коммит» уже выше, чем объем физической памяти. // Кроме того, вы действительно ожидаете, что * kernel * будет использовать столько памяти? Daniel B 6 лет назад 1
[используйте poolmon] (https://superuser.com/a/674725/174557), чтобы понять, почему использование выгружаемого пула слишком велико и какой драйвер использует так много оперативной памяти. magicandre1981 6 лет назад 1
https://i.stack.imgur.com/p8Ub6.png верхние процессы занимают около 143 МБ, я ищу в правильном направлении? George21 6 лет назад 0
сначала отсортируйте данные с помощью ** B ** для байтов magicandre1981 6 лет назад 0
я уже сделал это https://i.stack.imgur.com/BpZSy.png George21 6 лет назад 0
[Тег CM31 используется для загрузки кустов реестра] (https://superuser.com/a/1283948/174557), Mm = общие распределения Mm, дескрипторы виртуальных адресов Vadl - Mm, TSwd - rdpwd.sys - RDPWD - драйвер для Winstation Hydra , поэтому я предполагаю, что это сервер RemoteApp / Desktop. сколько пользователей подключено? magicandre1981 6 лет назад 0
в среднем 22 пользователя George21 6 лет назад 0
растет ли использование, чем больше пользователей подключается? уменьшается, если они отключаются? magicandre1981 6 лет назад 0
Нет, память растет, даже если пользователи отключены, постепенно George21 6 лет назад 0

2 ответа на вопрос

1
Jamie Hanrahan

Первый комментарий: отображение «память ядра - Paged» (здесь почти 22 ГБ) - это виртуальный размер выгружаемого пула.

«Пулы» в Windows - это куча памяти ядра. Они используются драйверами ядра и кодом режима ядра Windows почти так же, как куча используется программами пользовательского режима, но они находятся в адресном пространстве ядра, являются общими для всех процессов и, конечно, доступны только из режима ядра. Существует несколько типов распределений пулов, но они делятся на «невыгружаемые» и «выгружаемые» области. Не выгружаемый пул всегда находится в оперативной памяти.

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

И, как и в случае распределения в пользовательском режиме, мы можем ожидать, что в любое время некоторое подмножество виртуального размера выгружаемого пула будет «резидентным» или «действительным» в ОЗУ (доступно без ошибки страницы; такая ОЗУ считается «используемой»). ); другое подмножество будет «в переходном состоянии» (в списке резервных или измененных страниц и доступно, но с ошибкой мягкой страницы), а остальное будет действительно выгружено - в файле страницы, требуя жесткой ошибки страницы для доступа.

Теперь 22 ГБ это много выгружаемого пула. Я имею в виду, действительно, очень много. Такое количество очень необычно. Я подозреваю, что у вас неисправный драйвер устройства, который пропускает выгружаемую память как сито.

Я бы использовал poolmon или Windows Performance Toolkit, чтобы узнать, что выделено для всего этого пула. Здесь много ответов на SU, которые показывают, как это сделать подробно.

В комментарии к вашему вопросу magicandre1981 ссылается на один из его ответов, в котором подробно описана процедура.

Кроме того, кажется, что что-то мешает записи в файл подкачки.

На вашем снимке экрана с RAMmap (и спасибо, что включили его) видно, что из 19 ГБ выгружаемого пула, занимающего ОЗУ (обратите внимание, это меньше, чем виртуальный размер), около 620 МБ является «активным». Это означает, что большая часть оперативной памяти считается «используемой». Это та часть, к которой можно получить доступ без ошибки страницы. У PTE, которые описывают эти виртуальные страницы, установлены свои «действительные» биты.

Почти столько же, около 680 МБ, находится в списке страниц в режиме ожидания.

И вот еще индикатор второй проблемы: более 17 ГБ находятся в списке «Модифицированные».

«Измененный» список страниц - это место, в которое помещаются страницы, когда они перемещаются из рабочего набора после того, как их содержимое было изменено с момента их внесения. (Если содержимое страницы не было изменено с тех пор, как оно было перемещено, то когда потерянный из своего рабочего набора, он просто помещается в список резервных страниц, часть «доступной» оперативной памяти и может быть сразу же перенаправлен для другого использования.) Такие страницы просто не могут быть выпущены для использования каким-либо другим процессом; их содержимое должно быть сохранено. Для страниц, поддерживаемых файлом подкачки, «сохранено» означает «записано в файл подкачки».

После записи измененной страницы на диск она перемещается в резервный список, из которого она может быть переназначена. Резервный список считается частью «доступной» оперативной памяти. (Это также часть счетчика «Cached» в этом окне диспетчера задач.)

Таким образом, у вас есть более 17 ГБ ОЗУ в измененном списке страниц - ОЗУ, которое ваша система хотела бы записать в файл подкачки.

Это дико излишне.

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

Я заметил, что ваш текущий размер файла подкачки составляет около 5 ГБ, и для каждого вывода WMI он заполнен. (Таким образом, ваша система выполняет запись в файл подкачки.) Но, похоже, что расширение файла подкачки по какой-то причине не происходит.

Хм - вы ограничили размер файла подкачки максимум до 20 ГБ, и даже если он был расширен до этого размера, этого будет недостаточно для хранения его текущего содержимого плюс еще 17 ГБ. Возможно, если бы вы увеличили максимально возможный размер PF (Windows предлагает почти 40 ГБ), то все было бы неприкосновенно.

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

Между тем, эти 17+ ГБ не «доступны» для другого использования. Вот почему ваш «Доступный» ОЗУ так мало.

Мы видели ошибки в размере файла подкачки, которые очищаются с помощью:

  • отключить файл подкачки
  • выключить и перезагрузить
  • убедитесь, что старый файл подкачки исчез. Если нет, удалите его.
  • установить размеры файла подкачки на что-то разумное
  • при необходимости выключите и перезагрузите

Вы можете попробовать это.

Но ваша настоящая проблема в том, что вам действительно не нужно сначала 20 ГБ выгружаемого пула. Найти и исправить это.

После этого вы должны снова проверить использование вашего файла подкачки и установить его начальный размер как минимум вдвое больше, чем при обычном использовании. Нет веской причины устанавливать начальный размер меньше, чем обычно требуется вашей системе. (Мне нравится видеть, что файл подкачки используется не более чем на 25%, по причинам, связанным с алгоритмами распределения пространства - они работают намного лучше с большим количеством свободного места для работы.)

Кстати, обе страницы «Standby» и «Modified» (на мой взгляд, несколько вводящие в заблуждение) считаются частью «Cached» на этом экране диспетчера задач. Таким образом, тот факт, что у вас есть 17,4 ГБ «Модифицированный», объясняет тот огромный «Кэшированный» номер. Огромное число «кэшированных» само по себе не является проблемой; это один из симптомов.

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат] (https://chat.stackexchange.com/rooms/74714/discussion-on-answer-by-jamie-hanrahan-why-isnt-pagefile-being-used). DavidPostill 6 лет назад 0
0
Sreejith. D. Menon

Выгружаемый пул - это классификация кода режима ядра. Код режима ядра будет использовать выгружаемый или невыгружаемый пул для операций, и определенные операции требуют определенного типа. Это может поддерживаться или не поддерживаться файлом подкачки. Распределение и использование подкачки зависит от операционной системы. На самом деле, пейджинг стоит ваших операций ввода-вывода, поэтому ОС предпочитает хранить как можно больше в Physical. Физическая конфигурация 24 ГБ для 64-битной ОС - это, как я вижу, конфигурация. ОС может очень хорошо управлять большинством операций в первичной памяти.

https://technet.microsoft.com/en-us/library/ff382715.aspx

Приведенная выше ссылка поможет понять размер кэшируемого.

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

Редактировать: - После всего анализа «См. ~ 40 комментариев» виновником является сторонний водитель. Анализ сделан с помощью первоклассного анализа / указания на то, что это действительно проблема (кредит: Джейми Ханрахан) и анализа Paged Pool (кредит: Magicandre). Необходим дальнейший анализ, чтобы ответить на актуальный вопрос.

* Это может поддерживаться или не поддерживаться файлом подкачки. * Все категории памяти, за исключением «невыгружаемого пула», будут поддерживаться файлом подкачки. Обратите внимание, что поддержка со стороны PF отличается от фактической * записи * в нее. Поддержка в PF просто означает, что ОС зарезервировала место в PF. Twisty Impersonator 6 лет назад 0
Я имел в виду, что у него все еще будет возможность использовать файл подкачки. Я сказал это ясно, когда сказал, что все зависит от ОС! Когда я сказал, что он не может быть поддержан PF, я имел в виду, что его нельзя менять часто. Я понимаю, что «поддержанный» следовало использовать осторожно, и спасибо, что сделали его семантически правильным, Twisty! Sreejith. D. Menon 6 лет назад 0
Чтобы добавить к этому - для отображения памяти это выбор, который будет поддерживаться файлом подкачки или фактическим файлом, который будет отображаться в кэш файловой системы. Таким образом, в этом случае он будет поддерживаться не файлом подкачки, а самим файлом, на основе которого создается объект раздела. Так что вы можете захотеть посмотреть на этот аспект слишком извилистые. Я знаю, что говорить об управлении памятью не так просто :) Sreejith. D. Menon 6 лет назад 0
_ «Файл подкачки будет поддерживаться всеми категориями памяти, кроме« невыгружаемого пула ».» _ Извините, но это не так. Как сказал SDM, выделения памяти, поддерживаемые сопоставленными файлами, поддерживаются самими файлами. Это действительно может быть файл подкачки (вызовите CreateFileMapping с NULL для дескриптора файла, и вы получите раздел с поддержкой файла подкачки), но гораздо чаще это конкретный файл. Весь исполняемый код (exe, dll и т. Д.) Обрабатывается таким образом, так что вы можете видеть, что должно происходить совсем немного этого. Посмотрите на панель «DLL» в Process Explorer, чтобы увидеть файлы, на которые отображается процесс. Jamie Hanrahan 6 лет назад 0
Джейми Ханрахан, как в Джейми Ханрахан из Windows внутренностей: O. Если да, то сейчас мне пора учиться и приятно видеть тебя рядом :) Sreejith. D. Menon 6 лет назад 0

Похожие вопросы