Иногда я открываю программу, которая выделяет слишком много памяти - т. Е. На компьютере свободно 0,5 ГБ оперативной памяти, а приложение запрашивает 1 ГБ.

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

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

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

Есть ли какой-то способ сказать Windows: эй, если приложение запрашивает слишком много памяти, поместите свою память под замену, а не память основных служб.

ОС Windows Server 2012 x64, но я видел это и на многих других машинах.

1 ответ1

0

В комментарии Дэниел Б говорит, что у меня возникло голодание ввода-вывода, поэтому я попытался переместить файл подкачки из системного раздела (C:) на отдельный диск.

Это сработало - когда под давлением памяти компьютер больше не переставал отвечать. Затем я решил провести некоторое исследование по этой проблеме, чтобы понять, почему это происходит. Вот мои выводы:

  1. В официальном документе Microsoft, озаглавленном «Приоритизация ввода-вывода в Windows Vista», указано, что операции ввода-вывода выполняются иерархически и что все операции ввода-вывода с критическим приоритетом должны обрабатываться до любых других операций ввода-вывода с приоритетом.

  2. Также сказано, что ввод-вывод с критическим приоритетом зарезервирован для менеджера памяти.

  3. Я не смог найти доказательств существования какой-либо специальной расстановки приоритетов менеджером памяти на основе владельца страницы (т. Е. Обмен страниц памяти, выделенных процессами с более низким приоритетом, также получал более низкий приоритет ввода / вывода).

  4. Я не смог найти никаких доказательств новых стратегий приоритизации в Windows 8.

Таким образом, если предположить, что все операции ввода-вывода диспетчера памяти имеют одинаковый (критический) приоритет и что стратегия ввода-вывода не изменилась с Vista, это является причиной катастрофы:

  • Swap-файл на том же диске, что и система (обычно C:)

  • Процесс запрашивает больше памяти, чем физически доступно в системе.

  • Происходит обмен. В то время как происходит перестановка, никакие другие операции ввода-вывода не могут выполняться, даже необходимые операции ввода-вывода системными службами или другими компонентами ядра, поскольку критический ввод-вывод зарезервирован для менеджера памяти И все критические операции ввода-вывода выполняются до любой другой ввод / вывод.

  • Постепенно каждый процесс, блокирующий ввод-вывод, застревает. В конечном итоге система фактически не отвечает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .