Файл: Руссинович М., Маргозис А. Утилиты Sysinternals. Справочник администратора 2012.pdf
Добавлен: 29.10.2018
Просмотров: 32994
Скачиваний: 742

212 Часть
II
Работа с утилитами
С помощью VMMap можно сделать несколько моментальных снимков
памяти процесса и отобразить его изменения в виде графика, чтобы найти
все изменения, произошедшие между моментами создания снимков. В со-
четании с параметрами фильтрации и обновления это позволяет определять
источники использования памяти процесса и расход памяти функциями
приложений.
Кроме того, VMMap «впрыскивает» в процессы свою DLL для монито-
ринга распределения их памяти, путей к коду и стеков вызовов, формирую-
щих данную картину распределения памяти. При наличии полных символов
VMMap покажет и строку исходного кода, вызвавшего то или иное измене-
ние в распределении памяти.
Рис. 7-1. Главное окно VMMap
VMMap поддерживает не только представления с гибкими возможностя-
ми для анализа процессов в реальном времени, но и экспорт данных в разных
форматах, включая собственный формат, сохраняющий подробные данные
и позволяющий загружать их обратно в VMMap для просмотра. Также эта
утилита поддерживает параметры командной строки для использования в
сценариях.
VMMap — идеальная утилита для разработчиков, желающих понять и
оптимизировать использование памяти их приложениями. (Увидеть обще-
системное распределение системной памяти в Windows можно с помощью
утилиты RAMMap, описанной в главе 14.) VMMap работает в Windows XP
(редакции x86 и x64) и выше.
SIN_ch_07.indd 212
27.12.2011 14:30:22

Утилиты для работы с процессами и диагностики
Глава 7 213
Запуск VMMap и выбор процесса
Первое, что нужно сделать, запустив VMMap, — выбрать процесс для ана-
лиза. Если не указать процесс во входном файле или командной строке (см.
ниже), VMMap откроет окно Select or Launch Process (Выбор или запуск
процесса). На вкладке View a Running Process (Просмотр запущенного
процесса) можно выбрать уже запущенный процесс, а с вкладки Launch
and Trace a New Process (Запуск и отслеживание нового процесса) можно
запустить новый процесс и следить за его распределениями памяти. Окно
Select or Launch Process (Выбор или запуск процесса) можно открыть и
позже, нажав Ctrl+P.
Просмотр запущенного процесса
Выберите процесс на вкладке View a Running Process (Просмотр запущен-
ного процесса) (рис. 7-2) и щелкните OK. Чтобы быстро найти процесс по
идентификатору (PID) или по использованию памяти, щелкните на любом
заголовке столбца, чтобы отсортировать строки по этому столбцу. Доступны
следующие столбцы: User (Пользователь), Private Bytes (Байты закры-
той памяти), Working Set (Рабочий набор) и Architecture (Архитектура)
(в последнем показано, является ли процесс 32-разрядным или 64-разряд-
ным). Чтобы обновить список, щелкните кнопку Refresh (Обновить).
Рис. 7-2. Окно Select or Launch Process со списком запущенных процессов
На вкладке View a Running Process (Просмотр запущенного процес-
са) перечислены только те процессы, которые VMMap может открыть.
Если VMMap запущена без администраторских прав (включая привилегию
Debug [Отладка]), список будет включать только процессы, запущенные тем
же пользователем, что запустил VMMap, на том же или более низком уровне
целостности (IL). В Windows Vista и выше можно перезапустить VMMap
SIN_ch_07.indd 213
27.12.2011 14:30:22

214 Часть
II
Работа с утилитами
с повышенными правами, щелкнув кнопку Show All Processes (Показать
все процессы) или выбрав команду меню File | Run As Administrator (Файл
| Запустить от имени администратора).
В Windows с архитектурой x64 VMMap может анализировать 32- и 64-
разрядные процессы. Для анализа 32-разрядных процессов VMMap запу-
скает свою 32-разрядную версию и 64-разрядную для анализа 64-разрядных
процессов. (Подробнее см. в главе 1.) Если использовать параметр команд-
ной строки -64 (см. ниже), 64-разрядная версия утилиты будет использо-
ваться для анализа всех процессов.
Запуск и мониторинг нового процесса
Если запустить приложение из VMMap, оно получит инструментарий для
отслеживания отдельных операций выделения памяти и соответствующих
вызовов в стеке. Введите путь к приложению и, если требуется, аргументы
командной строки и папку для запуска, как показано на рис. 7-3, после чего
щелкните OK.
Рис. 7-3. Запуск и отслеживание нового процесса
VMMap подгружает свою DLL в целевой процесс при его запуске и пере-
хватывает его вызовы API виртуальной памяти. Кроме типа выделяемой
памяти, размера и сведений о ее защите, VMMap собирает данные о стеке
вызовов в момент выделения. VMMap по-разному группирует эти сведения
(см. ниже в этой главе).
В Windows с архитектурой x64 VMMap может “впрыскивать” DLL cо
своим инструментарием и отслеживать программы для x86 и x64, при этом
запускается 32- или 64-разрядная версия утилиты, соответственно. Однако
в Windows x64 VMMap не может отслеживать программы .NET, собранные
для «любого ЦП» («Any CPU»), это возможно только в 32-разрядных вер-
сиях Windows. Однако мониторинг возможен и в 64-разрядных версиях
SIN_ch_07.indd 214
27.12.2011 14:30:23

Утилиты для работы с процессами и диагностики
Глава 7 215
Windows — путем выбора на вкладке View a Running Process (Просмотр
запущенного процесса) окна Select or Launch Process (Выбор или запуск
процесса).
Примечание Архитектура «Any CPU» используется по умолчанию при сборке при-
ложений на C# и Visual Basic .NET в Visual Studio 2005 и выше.
Окно VMMap
После выбора или запуска процесса VMMap анализирует его, показывает
графическое представление виртуальной и физической памяти, а также таб-
личные представления Summary (Общие) и Details (Подробно). В них
типы памяти представлены различными цветами. Представление Summary
также выделено отдельным цветом.
Первая гистограмма в окне VMMap (рис. 7-1) — Committed (Переданная).
Ее разноцветные части показывают относительные пропорции различных
типов памяти, преданной в адресное пространство процесса. Также она слу-
жит эталоном, с которым сравниваются две другие диаграммы. Общее чис-
ло, показанное над правой частью диаграммы, показывает не всю распреде-
ленную память, а только «доступную» процессу память. Области, которые
пока только зарезервированы, еще не доступны, а потому не отображаются
на этой диаграмме. Другими словами, сюда включается физическая память
(ОЗУ), память из файла подкачки и спроецированных в память файлов.
Вторая диаграмма — Private Bytes (Байты закрытой памяти). Здесь ото-
бражается память процесса, не разделяемая с другими процессами, выделен-
ная в ОЗУ или файле подкачки. Сюда входит стек, кучи, неформатирован-
ная виртуальная память, страничные таблицы и области чтения-записи про-
екций образов и файлов. Надпись над правой частью диаграммы показывает
общий размер собственной памяти процесса. Цветные области диаграммы
показывают пропорции различных типов закрытой памяти. Отношение раз-
мера цветных областей к общей длине диаграммы показывает их долю в ис-
пользуемой виртуальной памяти.
Третья гистограмма показывает рабочий набор процесса. Рабочий набор —
это виртуальная память процесса, загруженная в физическую оперативную
память. Как и на предыдущей диаграмме, цветные области показывают доли
различных типов памяти в ОЗУ, а их размер — относительную величину по
сравнению с общей виртуальной памятью, выделенной процессу и загру-
женной в ОЗУ.
Заметьте, что эти диаграммы показывают только относительные пропор-
ции различных типов памяти, но не являются картами памяти, отображаю-
щими ее размещение. Такую карту для 32-разрядных процессов предостав-
ляет окно Address Space Fragmentation (Фрагментация адресного про-
странства), описанное далее в этой главе.
Под этими диаграммами расположена таблица Summary View (Сводка),
в которой указаны разные типы памяти (см. раздел «Типы памяти» ниже),
SIN_ch_07.indd 215
27.12.2011 14:30:23

216 Часть
II
Работа с утилитами
общий объем каждого типа, объем переданной процессу памяти и объем фи-
зического ОЗУ. Можно выбрать тип памяти в этой таблице, чтобы отфиль-
тровать содержимое секции Details View (Подробные сведения). Таблицу
можно отсортировать по значениям любого столбца, щелкнув его заголо-
вок. Если щелкнуть тот же заголовок еще раз, данные будут отсортированы
в обратном порядке. Порядок столбцов можно изменять, перетаскивая их.
Можно также изменять ширину столбцов, растягивая границы между их за-
головками.
Секция Details View (Подробные сведения), расположенная под табли-
цей Summary View, содержит информацию о каждой области памяти вирту-
ального адресного пространства процесса, работающего в пользовательском
режиме. Чтобы отображался только один тип, выберите этот тип в таблице
Summary View. Чтобы вернуться к просмотру всех типов памяти, выберите
в таблице Summary View строку Total (Всего). Сортировку, порядок и ши-
рину столбцов в секции Details View можно изменять так же, как и в табли-
це Summary View.
Строки типов памяти в секции Details View, можно раскрывать, чтобы
увидеть блоки, которыми выделялась память этого типа. Такая ситуация
бывает, например, когда резервируется крупный блок памяти и передается
процессу по частям. Это происходит и когда загрузчик образа или прило-
жение создает проекцию файла, а затем создает несколько проецированных
представлений этой проекции; например, чтобы установить разную защиту
для разных областей проекции. Можно раскрывать и сворачивать отдель-
ные группы подчиненных сопоставлений, щелкая на значках (+) и (–) в сек-
ции Details View. Также можно раскрыть или свернуть все группы сразу,
выбрав в меню Options (Параметры) команду Expand All (Раскрыть все)
или Collapse All (Свернуть все). Верхняя строка такой группы показывает
суммы компонентов группы. Когда выбирается другой порядок сортировки,
блоки остаются в строках верхнего уровня и сортируются внутри группы.
Если вам не нравится шрифт, выбранный для VMMap по умолчанию, мо-
жете выбрать другой шрифт для Summary View, Details View и некоторых
диалоговых окон.
Типы памяти
VMMap разделяет выделенную память на несколько типов.
• Образ (Image) — такая память представляет исполняемые файлы, такие
как EXE и DLL, загруженные в процесс загрузчиком образов. Заметьте,
что этот тип не включает исполняемые файлы, загруженные как файлы
данных, которые относятся к типу памяти Mapped File (Проецируемый
файл). Области исполняемого кода обычно доступны только для чтения
и выполнения, возможно их разделение. Области данных, такие как ини-
циализированные данные, обычно доступны для чтения и записи или
с копированием при записи. Когда изменяются страницы, доступные c
SIN_ch_07.indd 216
27.12.2011 14:30:23