2

В моей системе слишком много памяти (из 8 ГБ ОЗУ и 2 ГБ файла подкачки 85% памяти выделено). Физическое использование составляет около 65%.

Как я могу определить, какой процесс (ы) выделяет большую часть выделенной памяти? Я понимаю, что память может быть разделена между процессами. До сих пор я использовал VMMap для отображения выделенной памяти, но это основано на процессах и не учитывает разделы на основе файла подкачки.

3 ответа3

4

Решение PowerShell

1. Получите топ-10 процессов, использующих наибольшее количество виртуальной памяти

Get-Process | Sort PagedMemorySize-Desc | Select Name, PagedMemorySize, VirtualMemorySize -First 10

Пример вывода

Name                  VirtualMemorySize PagedMemorySize
----                  ----------------- ---------------
UrBackupClientBackend         685735936       548347904
explorer                     1529909248       478908416
Microsoft.Photos             1303465984       433094656
MBAMService                   661987328       228876288
MicrosoftEdgeCP               894496768       219799552
MsMpEng                       667783168       205774848
MicrosoftEdgeCP               874590208       202584064
mstsc                         440627200       185860096
javaw                         886177792       185556992
MicrosoftEdgeCP               802746368       146792448

2. Получить сумму всей выделенной виртуальной памяти

Get-WmiObject win32_operatingsystem | Select @{L='commit';E={($_.totalvirtualmemorysize - $_.freevirtualmemory)*1KB/1GB}} 

Пример вывода

commit
------
4.56205749511719

Вспомогательные ресурсы

2

Process Explorer может показать эту информацию для каждого процесса:

образ

Вот как получить приведенный выше экран в Process Explorer:

  • Нажмите меню Вид> Показать нижнюю панель
  • Нажмите меню Вид> Вид нижней панели > DLL
  • Выберите меню Вид> Показать безымянные маркеры и сопоставления.
  • Нажмите на процесс в верхней панели
  • Щелкните правой кнопкой мыши заголовки нижней панели и выберите « Выбрать столбцы ...».
  • На вкладке DLL отметьте « Размер сопоставленных файлов» и «Тип Mappinq».
  • Нажмите ОК

Process Hacker может аналогичным образом показать эту информацию, после выбора и двойного щелчка по процессу, на вкладке Handles снимите флажок Скрыть безымянные дескрипторы.

1

В списке процессов Process Explorer столбец "Private Bytes" отображает вклад каждого процесса в фиксацию. Нет необходимости смотреть на нижнюю панель.

Обязательно запустите Process Explorer от имени администратора.

Диспетчер задач отображает ту же информацию на вкладке Сведения в столбце "Размер коммита".

Обратите внимание, что то, что Диспетчер задач показывает в столбце «Память (частный рабочий набор)», - это не одно и то же, даже если оно использует слово "частный". Это показывает подмножество каждого коммит-заряда, которое в данный момент находится в оперативной памяти для этого процесса.

В соответствии с внутренними документами Windows, вкладчики в общую плату за принятие решений:

  • частное участие в каждом процессе
  • Сопоставленный с файлом подкачки подкачки (не отображается в "частных байтах" процесса)
  • области копирования при записи сопоставленных полей
  • Не выгружаемый и выгружаемый пул
  • другие выделения пространства ядра, явно не поддерживаемые файлами (например, код для постраничного вывода в драйверах или в ntoskrnl.exe не учитывается, так как он поддерживается соответствующими исполняемыми файлами)
  • Ядра стеков - каждый поток имеет один
  • Таблицы страниц
  • Пространство для таблиц страниц еще не выделено, но для которых уже существует выделенный vas
  • "Расширение оконного адреса" (AWE)

В Windows Internals более подробно рассказывается о том, что представляет собой каждая из этих вещей, и почему каждая из них учитывает общесистемный коммит. К сожалению, нет счетчиков для виртуальных размеров многих из этих вещей, что является обязательным условием. RAMmap показывает физические размеры некоторых из них, но не виртуальных.

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