Почему моя память используется на 65%, когда я не запускаю никаких программ?

798
Martin

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

И иногда это застряло.

Технические характеристики моего ноутбука:

Acer Aspire VX 15
ОС:
последнее обновление для Windows 10 x64 ОЗУ: 24 ГБ DDR4 2400
SSD: 512 ГБ
HDD: 1 ТБ
Процессор: corei7 7-го поколения 7700HQ 2.8
Графика: GeForce GTX 1050Ti GDDR5

Screenshot of Processes

Screenshot of Processes

Screenshot of Performance

Screenshot of RAMMap

Screenshot of RAMMap

1
... а в чем, по вашему мнению, проблема с использованием оперативной памяти? Объем оперативной памяти выше, чем у HD или SSD, так почему же он пуст, чтобы он мог бездействовать? Tetsujin 5 лет назад 3
Поскольку этот вопрос касается памяти, было бы полезно, если бы вы сортировали отображение диспетчера задач по «памяти» вместо «ЦП», чтобы мы могли видеть, что использует больше всего памяти на вашем ПК. Для начала, то, что Cortana использует более 100 МБ памяти, это огромный красный флаг. InterLinked 5 лет назад 0
Можете ли вы получить снимки экрана с вкладками «Сведения» (сортировка памяти по убыванию) и вкладкой «@Martin Performance» (выберите «Память») из диспетчера задач, а также взгляните на [RAMMap] (https://docs.microsoft.com/en-us/). sysinternals / downloads / rammap) (по крайней мере, скриншот первой вкладки, но если вы можете File => Сохранить файл .RMP ​​и предоставить его, еще лучше). Bob 5 лет назад 2
@Tetsujin На вкладке Процессы диспетчера задач не должно отображаться использование кеш-памяти. Кэш-память все еще * доступна *, даже если технически она не «свободна». Этот вопрос задает вопрос, почему использованное (то есть недоступное) число так велико, а не любое несвободное число. Bob 5 лет назад 0
Я согласен с Бобом: скриншот представления «Память» на вкладке «Производительность» * необходим * для того, чтобы даже * начать * оценивать ситуацию. Утечки памяти часто не (напрямую) связаны с процессами. Daniel B 5 лет назад 1
Как и выше, добавьте снимок экрана с вкладкой «Выполнение» в диспетчере задач ... выберите элемент «Память» из списка слева. Сколько стоит "_in use_" / "_cache_". Кэширование всегда хорошая идея, а использование ОЗУ всегда полезно. Attie 5 лет назад 1
@ Attie, я добавил вкладку Performance прямо сейчас, моя память показывает 8 ГБ, но я не запускаю никаких программ. Martin 5 лет назад 0
@ Боб, я добавил файл RAMMap. https://files.fm/u/avndc5eu#_ Martin 5 лет назад 0
"И иногда это застряло." -- Что это значит? David Schwartz 5 лет назад 0
@Martin Было бы более полезно, если бы вы могли снимать в то время, когда использование памяти велико. Тем не менее, на вашем скриншоте, `Page Table` ненормально высоко. Моим первым подозрением будет утечка ручки или, возможно, зомби-процессы. Я напишу ответ через минуту. Bob 5 лет назад 0
@Martin Несмотря на то, что отчет RAMMap был огромной помощью, я отредактировал его вне всякого сомнения, потому что у этой ссылки на скачивание есть срок действия / автоудаление. Как правило, наши вопросы и ответы полезны в долгосрочной перспективе, поэтому я просто упреждаю очистку ссылки, которая скоро станет мертвой. В то же время это будет в комментариях для всех, кто захочет ответить. Bob 5 лет назад 0

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

1
David Schwartz

Свободная память - это способность, которая тратится впустую. Система с 16 ГБ ОЗУ, которая сегодня использует только 8 ГБ, не может использовать 24 ГБ завтра. Вы не можете сохранить оперативную память на потом. Из-за этого современные операционные системы прилагают все усилия, чтобы поддерживать оперативную память, когда они могут тратить как можно меньше памяти.

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

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

Другими словами, ваша операционная система работает эффективно. Почти все современные операционные системы работают таким образом.

Вы были бы правы, если бы они спрашивали о фактически свободной оперативной памяти, но AFAIK «использование памяти», как показано в диспетчере задач и показано на скриншотах, * не * включает в себя дисковый кеш. Дисковый кеш считается доступным и, следовательно, не «используемым» - вы можете увидеть, как они разделены на вкладке «Производительность». Распространенные причины странной высокой «используемой» памяти включают утечки дескрипторов и блокировку памяти драйвером. Bob 5 лет назад 0
Я не говорю о дисковом кеше. Я говорю обо всем кешировании, включая такие вещи, как кеширование метаданных файловой системы и так далее. Даже кэши уровня приложения. То, что я говорю, верно в отношении использования памяти в целом и никак не связано с дисковым кешем, хотя это наиболее заметный пример такого рассуждения, который пронизывает всю систему и архитектуру приложения. David Schwartz 5 лет назад 0
Кэши уровня приложения * будут * появляться в частном рабочем наборе процесса, так что это не относится к этой "недостающей" ОЗУ. Кроме того, я считаю, что метаданные файловой системы и т. Д. Будут отображаться в счетчике «Кэширование», который все равно будет классифицирован как «Доступен». В любом случае, основываясь на отчете RAMMap, я уверен, что этот конкретный случай связан с утечкой дескрипторов процессов, что приводит к (большому) количеству процессов зомби. Я просто предпочитаю определить фактическую причину, прежде чем утверждать, что все работает как задумано - иногда это не так. Bob 5 лет назад 1
1
Bob

tl; dr: Загрузите все 5 файлов из FindZombieHandles, запустите его и посмотрите, какой процесс создает всех этих зомби.


Вы были правы, заметив эту проблему. 1

Есть несколько общих причин:

  • Утечка ручки, особенно объектов GDI
  • Утечка ручки, приводящая к процессам зомби
  • Память заблокирована драйвером, что может быть связано с ошибкой драйвера или даже с нормальной работой (например, раздувание VMware намеренно «съест» вашу оперативную память, чтобы попытаться сбалансировать ее между виртуальными машинами)

Получение дополнительной информации

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

В вашем конкретном случае я возвращаюсь к предоставленному вами скриншоту . Вы хотите взглянуть на Activeстолбец - Standbyстолбец содержит кэши, которые попадают в «доступную» память. Замечание Page Tableочень высокое - я ожидаю, что оно будет примерно 512 МБ, а не более 2 ГБ!

Сужение

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

На самом деле мы можем получить дальнейшее подтверждение на вкладке Процессы RAMMap. Обратите внимание, в вашем случае, сортировать по имени процесса, тысячи из tasklist.exeи сотни powershell.exeэкземпляров торчать. Фактически, все, что там с использованием Частной памяти, 0 Kявляется красным флагом процесса, который завершился, но все еще зомбируется.

Теперь вам нужно выяснить, какой процесс создает всех этих зомби. Есть несколько способов сделать это. Вы можете использовать диспетчер задач на вкладке Details и добавить столбец Handles. Любой процесс, содержащий большое количество зомби, также будет иметь слишком много открытых ручек. Вы также можете использовать Process Explorer, чтобы посмотреть, какие дескрипторы открыт для определенного процесса.

Однако, безусловно, самый простой способ - это использовать FindZombieHandles 2 (вам нужно загрузить все 5 файлов в один каталог). Если вы запустите этот инструмент (как администратор), он должен сказать вам, какой процесс создает и удерживает всех этих зомби. Оттуда вы можете завершить процесс, удалить приложение или сообщить об этом разработчику.


1 Как я объяснил в другом месте, на вкладке «Процессы» диспетчера задач отображается использование памяти, за исключением дисковых кешей, поэтому общее (Linux) объяснение «свободная оперативная память расточительна» обычно не применяется. Что касается диспетчера задач, дисковый кеш является частью доступной памяти. Не упоминается о «свободной» памяти.

2 Огромное спасибо Брюсу Доусону за этот инструмент.

-2
Raven

... Согласно этому скриншоту у вас запущено не менее 11 программ, и вы также не отключили "индексирование поиска" или "Диспетчер окон рабочего стола". Возможно, любые другие службы и т. Д., А также записи и анимации msconfig и т. Д.

-2
Michael Frank

Ваш компьютер использует оперативную память, потому что она включена.

Чтобы расширить это, операционная система - это программа.

  • исследователь
  • Диспетчер задач
  • Кортана
  • Ножницы
  • CTF Loader
  • VyprVPNService

Все, что перечислено выше, и все на вашем скриншоте - это программа, работающая поверх операционной системы, все они программы.

Да, но у него 24 ГБ оперативной памяти, и этот список не должен составлять около 62% от 24 ГБ. Aganju 5 лет назад 1
Полностью согласен с тобой @Aganju Jerry 5 лет назад 0