85

Диспетчер задач показывает мое общее использование памяти на уровне 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, как я могу избежать этого при каждой перезагрузке компьютера?

1 ответ1

9

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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