Просмотр использования виртуальной памяти

При необходимости в более подробной информации об использовании виртуальной памяти можно использовать 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 инструмент. Этот пример не является полным перечислением вывода инструмента, но является сокращенной версией, показывающей основные разделы.

  Вывод Listing 3 Typical 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  Описания столбца для vmmap

Номер столбца

Пример

Описание

1

__TEXT, __LINKEDIT, MALLOC_USED, STACK, и т.д.

Цель памяти. Этот столбец может содержать имя сегмента Mach-O или метода выделения памяти.

2

(DefaultMallocZone_0x5d2c0)

Если настоящее, зона используется для выделения.

3

4eee000

Адрес виртуальной памяти области.

4

[ 124K]

Размер области, измеренной в килобайтах

5

rw-/rwx

Читайте, запишите и полномочия выполнения для области. Первый набор флагов указывает текущую защиту для области. Второй набор значений указывает максимальную защиту для области. Если запись содержит тире (-), процесс не имеет целевого разрешения.

6

SM=PRV

Режим совместного использования для области, также COW (копия на записи), PRV (частный), NUL (пустой), ALI (искаженный), или SHM (совместно используемый).

7

...ts/MacOS/Clock

Конец пути, идентифицирующего исполнимую программу, отобразился в эту область виртуальной памяти. Если область является штабелем или памятью «кучи», ничто не выведено на экран в этом столбце.

Столбец 1 идентифицирует цель памяти. A __TEXT сегмент содержит код только для чтения и данные. A __DATA сегмент содержит данные, которые могут быть и читаемы и перезаписываемы. Для выделенных данных этот столбец показывает, как память была выделена, такой как на штабеле, с помощью malloc, и т.д. Для областей, загруженных из библиотеки, далекий правый столбец показывает имя библиотеки, загруженной в память.

Размер области виртуальной памяти (столбец 4) представляет общий размер, зарезервированный для той области. Это число может не отразить фактическое число страниц памяти, выделенных для области. Например, вызов vm_allocate резервы ряд страниц памяти, но не выделяет физической памяти до страниц, фактически затронуты. Точно так же файл с отображенной памятью может зарезервировать ряд страниц, но система не загружает страницы до чтения или пишет, что событие имеет место на файле.

Режим защиты (столбец 5) описывает ограничения доступа на область памяти. Область памяти содержит отдельные флаги для чтения, запишите, и полномочия выполнения. Каждая область виртуальной памяти имеет текущее разрешение и максимальное разрешение. В выводе от vmmap, текущее разрешение кажется первым сопровождаемый максимальным разрешением. Таким образом, если полномочия “r--/rwx“страница в настоящее время только для чтения, но позволяет чтение, запишите, и доступ выполнения как его максимальные позволенные полномочия. Как правило, текущие полномочия не разрешают писать в область. Однако эти полномочия могут измениться при определенных обстоятельствах. Например, отладчик может запросить доступ для записи к странице для установки точки останова.

Режим совместного использования (SM= поле), говорит Вам, поделятся ли страницами между процессами и что происходит, когда изменяются страницы. Частные страницы (PRV) видимы только к процессу и выделяются, поскольку они используются. Частные страницы могут также быть разбиты на страницы к диску. Копия на записи (COW) страницами поделятся многократные процессы (или совместно использует единственный процесс в многократных расположениях). Когда страница изменяется, запись тогда получает свою собственную копию страницы. Пустой (NUL) совместное использование подразумевает, что страница действительно не существует в физической памяти. Искаженный (ALI) и совместно использованный (SHM) память совместно используется процессами.

Режим совместного использования обычно описывает общий режим, управляющий областью. Например, поскольку страницы копии на записи изменяются, они становятся частными к приложению. Однако область, содержащая те частные страницы, является все еще копией на записи, пока все страницы не становятся частными. Как только все страницы являются частными, изменения режима совместного использования в частном.

Некоторые строки в выводе vmmap опишите подкарты. Подкарта является совместно используемым набором описаний страницы виртуальной памяти, которые операционная система может снова использовать между многократными процессами. Например, память между 0x90000000 и 0xAFFFFFFF подкарта, содержащая наиболее распространенные динамические библиотеки. Подкарты минимизируют использование памяти операционной системы путем представления областей виртуальной памяти только один раз. Подкарты могут или быть совместно использованы всеми процессами (всей машины), или быть локальны для процесса (только для процесса). Если содержание подкарты всей машины изменяется — например, отладчик делает раздел памяти для динамической библиотеки перезаписываемым, таким образом, это может вставить прерывания отладки — тогда, подкарта становится локальной, и ядро выделяет память для хранения дополнительной копии.