Просмотр использования виртуальной памяти
При необходимости в более подробной информации об использовании виртуальной памяти можно использовать top
, vm_stat
, pagestuff
, и vmmap
инструменты командной строки для анализа Ваших приложений Mac. Информация, возвращенная этими инструментами, колеблется от сводной информации обо всех системных процессах к подробной информации об определенном процессе.
Следующие разделы предоставляют информацию об использовании vm_stat
, pagestuff
, и vmmap
инструменты для сбора подробной информации памяти. Для получения дополнительной информации об использовании Инструментов для анализа памяти см. Инструментальное Руководство пользователя и другие статьи в этом документе. Для получения информации о том, как использовать top
инструмент, см. Обзор производительности.
Просмотр статистики виртуальной памяти
vm_stat
инструмент выводит на экран высокоуровневую статистику о текущем использовании виртуальной памяти системы. По умолчанию, vm_stat
дисплеи эти статистические данные один раз, но можно указать значение интервала (в секундах) для обновления этих статистических данных постоянно. Для получения информации об использовании этого инструмента посмотрите vm_stat
страница справочника.
Перечисление 1 показывает пример вывода от vm_stat
.
Вывод перечисления 1 vm_stat инструмента
Mach Virtual Memory Statistics: (page size of 4096 bytes) |
Pages free: 3194. |
Pages active: 34594. |
Pages inactive: 17870. |
Pages wired down: 9878. |
"Translation faults": 6333197. |
Pages copy-on-write: 81385. |
Pages zero filled: 3180051. |
Pages reactivated: 343961. |
Pageins: 33043. |
Pageouts: 78496. |
Object cache: 66227 hits of 96952 lookups (68% hit rate) |
Просмотр мужественных кодовых страниц
pagestuff
инструмент выводит на экран информацию об указанных логических страницах файла, соответствующего Мужественному формату исполняемых файлов. Для каждой указанной страницы кода выведены на экран символы (функциональные и статические имена структуры данных). Все страницы в __TEXT, __text
если никакие номера страниц не даны, раздел выведен на экран.
Перечисление 2 показывает часть вывода от pagestuff
для приложения TextEdit. Этот вывод является результатом выполнения инструмента с -a
опция, распечатывающая информацию обо всех кодовых страницах исполнимой программы. Это включает расположения виртуального адреса каждой страницы и тип информации на той странице.
Вывод Listing 2 Partial pagestuff инструмента
File Page 0 contains Mach-O headers |
File Page 1 contains Mach-O headers |
File Page 2 contains contents of section (__TEXT,__text) |
Symbols on file page 2 virtual address 0x3a08 to 0x4000 |
File Page 3 contains contents of section (__TEXT,__text) |
Symbols on file page 3 virtual address 0x4000 to 0x5000 |
File Page 4 contains contents of section (__TEXT,__text) |
Symbols on file page 4 virtual address 0x5000 to 0x6000 |
... |
File Page 22 contains contents of section (__TEXT,__cstring) |
File Page 22 contains contents of section (__TEXT,__literal4) |
File Page 22 contains contents of section (__TEXT,__literal8) |
File Page 22 contains contents of section (__TEXT,__const) |
Symbols on file page 22 virtual address 0x17000 to 0x17ffc |
File Page 23 contains contents of section (__DATA,__data) |
File Page 23 contains contents of section (__DATA,__la_symbol_ptr) |
File Page 23 contains contents of section (__DATA,__nl_symbol_ptr) |
File Page 23 contains contents of section (__DATA,__dyld) |
File Page 23 contains contents of section (__DATA,__cfstring) |
File Page 23 contains contents of section (__DATA,__bss) |
File Page 23 contains contents of section (__DATA,__common) |
Symbols on file page 23 virtual address 0x18000 to 0x18d48 |
0x00018000 _NXArgc |
0x00018004 _NXArgv |
0x00018008 _environ |
0x0001800c ___progname |
... |
В предыдущем перечислении, если страница экспортирует какие-либо символы, те символы также выведены на экран -a
опция. Если Вы хотите просмотреть символы для единственной страницы, передайте в желаемом номере страницы вместо -a
опция. Для получения дополнительной информации о pagestuff
инструмент и его поддерживаемые опции, посмотрите pagestuff
страница справочника.
Просмотр областей виртуальной памяти
vmmap
и vmmap64
инструменты выводят на экран области виртуальной памяти, выделенные для указанного процесса. Эти инструменты обеспечивают доступ к виртуальной памяти 32-разрядных и 64-разрядных приложений, соответственно. Можно использовать их для понимания цели памяти в данном адресе и как используется та память. Для каждой области виртуальной памяти эти инструменты выводят на экран тип страницы, начального адреса, размер области (в килобайтах), полномочия чтения-записи, режим совместного использования и цель страниц в той области.
Следующие разделы показывают Вам, как интерпретировать вывод от vmmap
инструмент. Для получения дополнительной информации о vmmap
и vmmap64
инструменты, посмотрите vmmap
или vmmap64
страницы справочника.
Демонстрационный Вывод От vmmap
Перечисление 3 показывает некоторый демонстрационный вывод от vmmap
инструмент. Этот пример не является полным перечислением вывода инструмента, но является сокращенной версией, показывающей основные разделы.
==== Non-writable regions for process 313 |
__PAGEZERO 0 [ 4K] ---/--- SM=NUL ...ts/MacOS/Clock |
__TEXT 1000 [ 40K] r-x/rwx SM=COW ...ts/MacOS/Clock |
__LINKEDIT e000 [ 4K] r--/rwx SM=COW ...ts/w/Clock |
90000 [ 4K] r--/r-- SM=SHM |
340000 [3228K] r--/rwx SM=COW 00000100 00320... |
789000 [3228K] r--/rwx SM=COW 00000100 00320... |
Submap 90000000-9fffffff r--/r-- machine-wide submap |
__TEXT 90000000 [ 932K] r-x/r-x SM=COW /usr/lib/libSystem.B.dylib |
__LINKEDIT 900e9000 [ 260K] r--/r-- SM=COW /usr/lib/libSystem.B.dylib |
__TEXT 90130000 [ 740K] r-x/r-x SM=COW .../Versions/A/CoreFoundation |
__LINKEDIT 901e9000 [ 188K] r--/r-- SM=COW .../Versions/A/CoreFoundation |
__TEXT 90220000 [2144K] r-x/r-x SM=COW .../Versions/A/CarbonCore |
__LINKEDIT 90438000 [ 296K] r--/r-- SM=COW .../Versions/A/CarbonCore |
[...data omitted...] |
==== Writable regions for process 606 |
__DATA 18000 [ 4K] rw-/rwx SM=PRV /Contents/MacOS/TextEdit |
__OBJC 19000 [ 8K] rw-/rwx SM=COW /Contents/MacOS/TextEdit |
MALLOC_OTHER 1d000 [ 256K] rw-/rwx SM=PRV |
MALLOC_USED(DefaultMallocZone_0x5d2c0) 5d000 [ 256K] rw-/rwx SM=PRV |
9d000 [ 372K] rw-/rwx SM=COW 33320000 00000020 00000000 00001b84... |
VALLOC_USED(DefaultMallocZone_0x5d2c0) ff000 [ 36K] rw-/rwx SM=PRV |
MALLOC_USED(CoreGraphicsDefaultZone_0x10 108000 [ 256K] rw-/rwx SM=PRV |
MALLOC_USED(CoreGraphicsRegionZone_0x148 148000 [ 256K] rw-/rwx SM=PRV |
[...data omitted...] |
Submap a000b000-a012ffff r--/r-- process-only submap |
__DATA a0130000 [ 28K] rw-/rw- SM=COW .../Versions/A/CoreFoundation |
Submap a0137000-a021ffff r--/r-- process-only submap |
__DATA a0220000 [ 20K] rw-/rw- SM=COW .../Versions/A/CarbonCore |
Submap a0225000-a048ffff r--/r-- process-only submap |
__DATA a0490000 [ 12K] rw-/rw- SM=COW .../IOKit.framework/Versions/A/IOKit |
Submap a0493000-a050ffff r--/r-- process-only submap |
__DATA a0510000 [ 36K] rw-/rw- SM=COW .../Versions/A/OSServices |
b959e000 [ 4K] rw-/rw- SM=SHM |
b95a0000 [ 4K] rw-/rw- SM=SHM |
b9630000 [ 164K] rw-/rw- SM=SHM |
b965a000 [ 896K] rw-/rw- SM=SHM |
bff80000 [ 504K] rw-/rwx SM=ZER |
STACK[0] bfffe000 [ 4K] rw-/rwx SM=PRV |
bffff000 [ 4K] rw-/rwx SM=PRV |
__DATA c000c000 [ 4K] rw-/rwx SM=PRV .../Versions/A/ApplicationEnhancer |
STACK[1] f0001000 [ 512K] rw-/rwx SM=PRV |
ff002000 [12272K] rw-/rw- SM=SHM |
==== Legend |
SM=sharing mode: |
COW=copy_on_write PRV=private NUL=empty ALI=aliased |
SHM=shared ZER=zero_filled S/A=shared_alias |
==== Summary for process 313 |
ReadOnly portion of Libraries: Total=27420KB resident=12416KB(45%) swapped_out_or_unallocated=15004KB(55%) |
Writable regions: Total=21632KB written=536KB(2%) resident=1916KB(9%) swapped_out=0KB(0%) unallocated=19716KB(91%) |
Если Вы указываете -d
параметр (плюс интервал в секундах), vmmap
берет два снимка использования виртуальной памяти — один в начале указанного интервала и другого в конце — и выводит на экран различия. Это показывает три набора различий:
индивидуальные различия
области в первом снимке, которые не находятся во втором
области во втором снимке, которые не находятся в первом
Интерпретация Вывода vmmap
Столбцы vmmap
вывод не имеет никаких заголовков. Вместо этого можно интерпретировать тип данных в каждом столбце его форматом. Таблица 1 описывает эти столбцы.
Столбец 1 идентифицирует цель памяти. A __TEXT
сегмент содержит код только для чтения и данные. A __DATA
сегмент содержит данные, которые могут быть и читаемы и перезаписываемы. Для выделенных данных этот столбец показывает, как память была выделена, такой как на штабеле, с помощью malloc
, и т.д. Для областей, загруженных из библиотеки, далекий правый столбец показывает имя библиотеки, загруженной в память.
Размер области виртуальной памяти (столбец 4) представляет общий размер, зарезервированный для той области. Это число может не отразить фактическое число страниц памяти, выделенных для области. Например, вызов vm_allocate
резервы ряд страниц памяти, но не выделяет физической памяти до страниц, фактически затронуты. Точно так же файл с отображенной памятью может зарезервировать ряд страниц, но система не загружает страницы до чтения или пишет, что событие имеет место на файле.
Режим защиты (столбец 5) описывает ограничения доступа на область памяти. Область памяти содержит отдельные флаги для чтения, запишите, и полномочия выполнения. Каждая область виртуальной памяти имеет текущее разрешение и максимальное разрешение. В выводе от vmmap
, текущее разрешение кажется первым сопровождаемый максимальным разрешением. Таким образом, если полномочия “r--/rwx
“страница в настоящее время только для чтения, но позволяет чтение, запишите, и доступ выполнения как его максимальные позволенные полномочия. Как правило, текущие полномочия не разрешают писать в область. Однако эти полномочия могут измениться при определенных обстоятельствах. Например, отладчик может запросить доступ для записи к странице для установки точки останова.
Режим совместного использования (SM=
поле), говорит Вам, поделятся ли страницами между процессами и что происходит, когда изменяются страницы. Частные страницы (PRV
) видимы только к процессу и выделяются, поскольку они используются. Частные страницы могут также быть разбиты на страницы к диску. Копия на записи (COW
) страницами поделятся многократные процессы (или совместно использует единственный процесс в многократных расположениях). Когда страница изменяется, запись тогда получает свою собственную копию страницы. Пустой (NUL
) совместное использование подразумевает, что страница действительно не существует в физической памяти. Искаженный (ALI
) и совместно использованный (SHM
) память совместно используется процессами.
Режим совместного использования обычно описывает общий режим, управляющий областью. Например, поскольку страницы копии на записи изменяются, они становятся частными к приложению. Однако область, содержащая те частные страницы, является все еще копией на записи, пока все страницы не становятся частными. Как только все страницы являются частными, изменения режима совместного использования в частном.
Некоторые строки в выводе vmmap
опишите подкарты. Подкарта является совместно используемым набором описаний страницы виртуальной памяти, которые операционная система может снова использовать между многократными процессами. Например, память между 0x90000000
и 0xAFFFFFFF
подкарта, содержащая наиболее распространенные динамические библиотеки. Подкарты минимизируют использование памяти операционной системы путем представления областей виртуальной памяти только один раз. Подкарты могут или быть совместно использованы всеми процессами (всей машины), или быть локальны для процесса (только для процесса). Если содержание подкарты всей машины изменяется — например, отладчик делает раздел памяти для динамической библиотеки перезаписываемым, таким образом, это может вставить прерывания отладки — тогда, подкарта становится локальной, и ядро выделяет память для хранения дополнительной копии.