Почему общее использование памяти, сообщаемое диспетчером задач Windows, намного выше, чем сумма использования памяти всеми процессами? [Дубликат]

98

Диспетчер задач показывает мое общее использование памяти на уровне 90% от общего объема в 6 ГБ, но ни один процесс не использует более 250 МБ ОЗУ, а сумма использования ОЗУ всеми запущенными процессами составляет менее 2 ГБ. Я пробовал:

  • Посмотрите на цифры в столбце «Память» на вкладке «Процессы» диспетчера задач Windows 8.
  • Посмотрите на столбцы «Рабочий набор», «Частный рабочий набор», «Общий рабочий набор» и «Размер фиксации» на вкладке «Подробности» диспетчера задач.
  • Глядя на похожие столбцы, связанные с памятью в Process Explorer.
  • Я пытался запустить Sysinternals RAMMap, но, несмотря на кризис с нехваткой памяти, он вылетает при запуске. Как только я решу проблему, RAMMap будет работать нормально, но на этом этапе уже слишком поздно.

Все показывают довольно небольшое количество используемой памяти.

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

  1. Почему общая используемая память намного выше, чем память, используемая всеми перечисленными процессами, независимо от того, как я пытаюсь их подсчитать?
  2. Как Windows может «знать», что память используется, не зная, какая программа ее использует?
  3. Какие процессы могут использовать память, но не отображаться в списке?
  4. Есть ли какое-либо программное обеспечение, которое может дать больше информации об используемой памяти?

Подробности, относящиеся к моей собственной проблеме: После обновления до Windows 8.1 проблема возникает, как только я вхожу в систему. У меня заканчивается память, как только я запускаю любую программу. Я заметил в Process Explorer, что несколько экземпляров iexplore.exe были запущены, по-видимому, автоматически. Один конкретный случай использовал только несколько МБ ОЗУ, но показал сотни миллионов сбоев страниц. По какой-то причине я убил этот конкретный процесс, и использование памяти сразу упало на 70%.

Ведущий к одному конкретному вопросу:

  • Как могло убить один процесс, который предположительно использовал только несколько МБ, освободив несколько ГБ?

И (предположительно сложный) бонусный вопрос:

  • Если не считать переустановки Windows, как я могу избежать необходимости проходить это каждый раз при перезагрузке компьютера?
мистифицировать
источник
3
также память ядра учитывается при использовании. Опубликовать изображение RAMMAp: blogs.technet.com/b/askperf/archive/2010/08/13/…
magicandre1981
2
Я думаю, что вопрос должен быть озаглавлен «Почему у меня заканчивается память».
Surfasb
На этот вопрос невозможно ответить без специфики. Список установленных программ. Или, еще лучше, дамп запущенных процессов из системного монитора.
Surfasb
1
Вы действительно выключаете или перезагружаете компьютер полностью или используете гибридное выключение (по умолчанию в Windows 8)? После перехода на Windows 8 у меня возникла похожая проблема. Я предполагаю, что один драйвер занимал все больше и больше физической памяти и не возвращал ее даже после выключения и включения компьютера. За несколько недель он накопился до нескольких гигабайт. Так что теперь каждые несколько дней я нажимаю «перезагрузка» или удерживаю смену, нажимая «выключить», чтобы фактически выключить компьютер.
Роберт
2
В моем случае это была память «Driver Locked», зарезервированная Hyper-V из-за включения «Динамическая память». Мне пришлось остановить все виртуальные машины, отключить настройки и перезапустить их. Спасибо за предложение RAMMap.
Дагельф

Ответы:

7

Кстати, вы должны стараться не использовать термин «память». Это создает много путаницы. Если вы имеете в виду физическую память, скажите «физическая память» или «RAM». Если вы имеете в виду виртуальную память, так и скажите. Если вы имеете в виду бэк-магазин, так и скажите.

Почему общая используемая память намного выше, чем память, используемая всеми перечисленными процессами, независимо от того, как я пытаюсь их подсчитать?

Потому что операционная система не тратит впустую физическую память (RAM), если у нее нет выбора.

Как Windows может «знать», что память используется, не зная, какая программа ее использует?

Потому что ни одна программа не использует его. Рассмотрим, например, память, которая содержит код для программы, которая только что завершилась. Ни одна программа не использует его. Но эта память используется, поскольку она не свободна и содержит данные, которые могут быть полезны (в случае, если программа снова запустится).

Какие процессы могут использовать память, но теперь отображаются в списке?

Это не используется процессами.

Есть ли какое-либо программное обеспечение, которое может дать больше информации об используемой памяти?

RAMMap может сделать это.

Есть только две возможности, RAM может быть использована или потрачена впустую. Очевидно, что первый лучше. Любая свободная память тратится впустую - машина объемом 4 ГБ не может использовать 2 ГБ сегодня, чтобы завтра использовать 6 ГБ. Если вы думаете: «Я хочу сейчас бесплатно, чтобы потом использовать его», забудьте об этом. Вы можете использовать его сейчас и использовать его позже.

Как могло убить один процесс, который предположительно использовал только несколько МБ, освободив несколько ГБ?

Вам не хватает резервного хранилища, а не физической памяти. У вас достаточно свободной физической памяти, но недостаточно резервного хранилища для ОС, чтобы продолжать выделять виртуальную память, которая может потребовать резервного копирования.

В процессе использовалось всего несколько МБ физической памяти, но ОС могла бы зарезервировать для него несколько ГБ резервной виртуальной памяти. Например, предположим, что процесс создает доступное для записи сопоставление частной памяти файла размером 2 ГБ. Операционная система должна зарезервировать 2 ГБ резервной виртуальной памяти для процесса, поскольку она может записывать каждый байт этого отображения. Кроме того, он может никогда не написать ни одному из них. Вот почему вам нужен файл подкачки хорошего размера.

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

Дэвид Шварц
источник
14
PS: я использую слово «память» не потому, что не знаю разницы между ОЗУ и ВМ, а потому, что мой компьютер только говорит мне, что ему не хватает «памяти», не давая мне никакой информации о том, что на самом деле означает. (Я предполагаю, что это означает RAM, по причинам, которые я указал в предыдущем комментарии, но я не уверен.) Я бы предпочел, чтобы вы использовали реальный словарь (который я могу найти в случае необходимости), чем разрабатывать финансовые метафоры :)
Джош
91
-1 потому что после прочтения ответа и всех комментариев все еще не ясно, почему общая используемая память намного выше, чем память, используемая всеми перечисленными процессами.
Беннет МакЭлви,
6
Эта терминология, где память «используется», хотя ни одна из программ ее не использует, совершенно не похожа на обычное значение таких слов, как «используется» и «свободный» - возможно, это терминология Microsoft, а не ваша. В любом случае, предположим, например, что 50% оперативной памяти в настоящее время используется запущенными программами, а 25% не используется какой-либо запущенной программой, но содержит данные, которые могут пригодиться в будущем, но также могут быть отброшены. Добавление их вместе и отображение «Память: 75%» не дает пользователю никакой полезной информации. Я думаю, что отсюда и распространенная путаница.
Беннет МакЭлви,
2
@BennettMcElwee Нет хорошего способа сократить использование памяти до одного простого числа, но пользователи настаивают на этом. Это ставит разработчиков в неудобное положение - они могут предоставить номер, который не всегда полезен, или не предоставить номер. Большинство разработчиков ОС и GUI выбирают первый вариант - они предоставляют число, которое приводит к путанице. Если ваш вопрос «увеличит ли ОЗУ мою систему лучше», ответ будет очень, очень трудно сказать, даже для экспертов.
Дэвид Шварц
2
@DavidSchwartz Ваш ответ не объясняет такого, он просто утверждает это. Можете ли вы предоставить какие-либо ссылки для поддержки этой конкретной претензии? Я понимаю, что «Физическая память XX%» означает, что XX% физически установленной оперативной памяти в настоящее время используется и недоступно для других процессов. Я полагаю, что я подтвержден тем фактом, что при превышении 90% система становится склонной к блокировкам, а когда приложения пытаются выделить память свыше 100%, они полностью аварийно завершают работу. По моему опыту, это не стандартный режим, в котором работает большинство систем.
Джон Нейгауз