Сведения об использовании памяти можно получить несколькими способами. Наиболее полезная информация содержится в выводе команд vmstat, ps и svmon.
Команда vmstat подсчитывает общий объем активной виртуальной памяти, занятой всеми процессами в системе, а также число страниц физической памяти в списке свободных страниц. Объем активной виртуальной памяти определяется как число страниц из рабочих сегментов виртуальной памяти, к которым фактически обращались процессы (более подробная информация приведена в разделе Алгоритм динамического выделения пространства подкачки). Это значение может превосходить объем оперативной памяти компьютера, так как некоторые из страниц активной виртуальной памяти могли быть выгружены в пространство подкачки.
Для того чтобы узнать, хватает ли в системе оперативной памяти и нужно ли настроить некоторые параметры ее использования, запустите команду vmstat, задав несколько интервалов сбора данных, а затем проанализируйте значения pi и po в отчете этой команды. Указанные значения задают число страниц, загружаемых из пространства подкачки и выгружаемых в пространство подкачки в секунду, соответственно. Если эти значения в большинстве случаев отличны от нуля, то вполне вероятно, что недостаток оперативной памяти ограничивает производительность системы. Если в отчете команды есть всего несколько ненулевых значений, то их можно проигнорировать, так как подкачка всегда выполняется в системах с виртуальной памятью.
# vmstat 2 10 нити память страница ошибки cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 1 3 113726 124 0 14 6 151 600 0 521 5533 816 23 13 7 57 0 3 113643 346 0 2 14 208 690 0 585 2201 866 16 9 2 73 0 3 113659 135 0 2 2 108 323 0 516 1563 797 25 7 2 66 0 2 113661 122 0 3 2 120 375 0 527 1622 871 13 7 2 79 0 3 113662 128 0 10 3 134 432 0 644 1434 948 22 7 4 67 1 5 113858 238 0 35 1 146 422 0 599 5103 903 40 16 0 44 0 3 113969 127 0 5 10 153 529 0 565 2006 823 19 8 3 70 0 3 113983 125 0 33 5 153 424 0 559 2165 921 25 8 4 63 0 3 113682 121 0 20 9 154 470 0 608 1569 1007 15 8 0 77 0 4 113701 124 0 3 29 228 635 0 674 1730 1086 18 9 0 73
Обратите внимание на время ожидания выполнения ввода-вывода и число блокированных нитей. Большие значения этих параметров могут быть обусловлены высокой интенсивностью подкачки.
Для того чтобы выяснить, связано ли снижение производительности системы с VMM, проанализируйте значения, указанные в разделах память и страница:
Содержит информацию о физической и виртуальной памяти.
В поле avm (активная виртуальная память) указано среднее число страниц размером 4 Кб, выделенных для пространства подкачки. С помощью значения avm можно подсчитать объем пространства подкачки, выделенный активным процессам.
Примечание: В AIX версии 4.3.2 и выше это значение интерпретируется немного иначе. За дополнительной информацией обратитесь к разделу Использование пространства подкачки и виртуальной памяти.
Значение avm, поделенное на 256, дает приближенную оценку общего объема памяти, выделенного в пространстве подкачки (в Мб). В версиях AIX младше 4.3.2 аналогичное значение указывается в столбце Занято (%) вывода команды lsps -s, а также в поле занято в пространстве подкачки вывода команды svmon -G.
Значение fre отражает среднее число свободных страниц памяти. Страницей называется блок физической памяти размером 4 Кб. В операционной системе создается буфер страниц, называемый списком свободных страниц, который применяется VMM для выделения дополнительной памяти. Минимальное число страниц в этом списке можно задать в параметре minfree команды vmtune (более подробная информация приведена в разделе Настройка алгоритма замены страниц VMM с помощью команды vmtune).
Когда работа приложения завершается, все страницы из его рабочего сегмента памяти добавляются в список свободных страниц. Страницы постоянной памяти (страницы файлов) остаются в оперативной памяти до тех пор, пока они не будут принудительно добавлены в список свободных страниц приложением VMM для их выделения другим программам. Страницы постоянной памяти автоматически освобождаются только при удалении файла.
По этой причине значение fre не позволяет точно оценить объем физической памяти, доступной процессам. Если какому-то приложению требуется страница памяти, то в первую очередь освобождаются страницы постоянной памяти тех приложений, которые уже завершили свою работу.
Если значение fre намного больше значения maxfree, то маловероятно, что в системе возникнет перегрузка памяти. Считается, что память перегружена, если все ресурсы системы уходят на выполнение подкачки. В случае перегрузки памяти значение fre всегда очень мало.
Содержит информацию о страничных ошибках и подкачке страниц. В этом разделе указаны средние значения, подсчитанные за интервал сбора данных. Они отражают число событий, происходящих в секунду.
Примечание: В AIX версии 4 это значение не включается в вывод команды, так как его ценность с точки зрения анализа производительности системы незначительна по сравнению с тем негативным влиянием, которое оказывает на производительность функция сбора информации о восстановлении памяти.
В поле pi указывается число страниц, загружаемых из пространства подкачки в секунду. Пространством подкачки называется область виртуальной памяти, расположенная на диске. Страницы выгружаются в пространство подкачки при переполнении оперативной памяти. Пространство подкачки представляет собой набор логических томов, предназначенных для хранения страниц рабочего набора, выгруженных из физической памяти. Когда процесс обращается к выгруженной на диск странице, возникает страничная ошибка. В этом случае страница загружается из пространства подкачки в оперативную память.
В связи с тем, что существует множество разнообразных конфигураций аппаратного и программного обеспечения, нельзя указать точное значение, которым следует руководствоваться. В общем случае число страниц, загружаемых из пространства подкачки в секунду, не должно превосходить 5. Это значение следует рассматривать как рекомендацию, а не как жесткое ограничение. Данное значение прежде всего отражает интенсивность подкачки. Если страница была загружена в память, значит ранее она была выгружена на диск. Кроме того, в системе с небольшим объемом оперативной памяти для загрузки страницы в оперативную память часто требуется выгрузить одну из страниц на диск. В некоторых системах показатель pi может оставаться равным 10 в течение минуты, после чего снизиться до нуля.
В поле po указывается число страниц, выгружаемых в пространство подкачки в секунду. При освобождении страницы из рабочего сегмента памяти она записывается в пространство подкачки, если эта страница еще ни разу не выгружалась на диск или была изменена. Если к этой странице не поступит повторных обращений, то она останется на устройстве подкачки до тех пор, пока процесс не завершит свою работу или не освободит занимаемую им память. Все последующие обращения к данным, хранящимся в выгруженных страницах, будут приводить к возникновению страничных ошибок, в результате чего система будет загружать необходимые страницы в память по-отдельности. Если процесс завершает работу в обычном режиме, то область пространства подкачки, выделенная этому процессу, освобождается. Если система загружает в память большое число постоянных страниц (файлов), то значение po может возрасти без пропорционального увеличения значения pi. Это не обязательно свидетельствует о перегрузке памяти. В этом случае нужно проанализировать шаблоны доступа к данным, применяемые приложениями.
Указывает число страниц, освобождаемых в секунду алгоритмом замены страниц. Функция замены страниц VMM выбирает страницы из таблицы страниц (PFT) для пополнения списка свободных страниц на основании определенного критерия. Этот критерий применяется к страницам из сегментов рабочей памяти и сегментов постоянной памяти. Для освобождения страницы не всегда требуется выполнять операции ввода-вывода. Например, если страница постоянной памяти (страница файла) не была изменена, то она не будет записана на диск. Когда не требуется выполнять операции ввода-вывода, на освобождение страницы затрачиваются минимальные ресурсы системы.
Указывает число страниц, просматриваемых алгоритмом замены страниц в секунду. Алгоритм замены страниц VMM просматривает таблицу PFT и освобождает подходящие страницы до тех пор, пока размер списка свободных страниц не достигнет значения maxfree. При этом алгоритм проверяет на соответствие критерию намного больше страниц, чем он фактически освобождает. Если оперативная память не фрагментирована, то число просмотренных и число освобожденных страниц будут практически совпадать. Если в системе выполняются несколько процессов, которые работают с разными страницами памяти, то разница между этими значениями будет более значительной. В этом случае число просматриваемых страниц может намного превышать число освобожденных страниц.
Когда отношение fr к sr (fr: sr) велико, в системе недостаточно памяти.
Если отношение fr: sr равно 1:4, то освобождается каждая четвертая страница. Ограничение на объем памяти нельзя определить, исходя только из этого коэффициента. Диапазон допустимых значений для этого коэффициента зависит от конкретной рабочей схемы (приложения).
Указывает число циклов, выполняемых в секунду алгоритмом замены страниц. Этот алгоритм применяется VMM для выбора страниц, которые нужно освободить. Он просматривает флаги обращений к страницам и выбирает те страницы, для которых этот флаг не установлен. Когда вызывается функция добавления страниц, она по кругу просматривает таблицу PTF, проверяя флаги обращений к страницам.
Значение cy указывает, сколько раз в секунду алгоритм замены страниц просматривает таблицу PTF. Поскольку обычно список свободных страниц заполняется до того, как будет просмотрена вся таблица PTF, а в выводе команды vmstat указываются только целочисленные значения, значение этого параметра чаще всего равно нулю. Ненулевое значение говорит о том, что после просмотра всей таблицы PFT значение fre осталось меньше значения maxfree, поэтому пришлось начать просмотр таблицы заново.
Для определения необходимого объема оперативной памяти найдите максимальное значение avm в выводе команды vmstat. Умножьте это значение на 4 Кб и сравните полученный результат с объемом оперативной памяти системы. В идеале значение, вычисленное на основе avm, должно быть меньше объема оперативной памяти. Если это не так, то в системе будет выполняться подкачка. Интенсивность подкачки зависит от разности между этими значениями. Основное назначение виртуальной памяти состоит в расширении адресного пространства системы (часть страниц виртуальной памяти хранится в оперативной памяти, а часть - в пространстве подкачки). Однако если объем виртуальной памяти будет намного превосходить объем физической памяти, то придется выполнять много операций подкачки, что приведет к значительным задержкам в работе системы. Если в системе выполняется подкачка, несмотря на то, что значение avm меньше объема оперативной памяти, то, скорее всего, оперативная память переполнена файловыми страницами. В этом случае число операций подкачки можно уменьшить, изменив значения minperm и maxperm (дополнительная информация приведена в разделе Настройка алгоритма замены страниц VMM с помощью команды vmtune).
В операционной системе AIX старше 4.3.3 предусмотрена команда vmstat -I (прописная i), позволяющая получить дополнительную информацию об использовании оперативной памяти, в том числе число файловых страниц, загружаемых в оперативную память и выгружаемых из оперативной памяти в секунду (другими словами, число операций загрузки и выгрузки страниц, не связанных с пространством подкачки). В выводе команды, вызванной с этим флагом, отсутствуют столбцы re и cy.
Команда, вызванная с опцией -s, записывает в стандартный поток вывода итоговый отчет, который содержит суммарные значения показателей использования памяти, подсчитанные за все время, прошедшее с момента инициализации системы. Эту команду рекомендуется вызывать дважды: до запуска оцениваемой рабочей схемы и после выполнения этой рабочей схемы. Дальше нужно оценить разницу между значениями, полученными в двух отчетах команды. В разделе Анализ зависимости неполадки от дисковой или оперативной памяти приведен сценарий awk с именем vmstatit, который автоматически создает список различий.
# vmstat -s
   3231543 ошибок преобразования адреса
    63623 страниц загружено
   383540 страниц выгружено
      149 страниц загружено из пространства подкачки
      832 страниц выгружено в пространство подкачки
        0 восстановлений
   807729 ошибок при обращении к страницам, заполненных нулями
     4450 ошибок при обращении к страницам с исполняемым кодом
   429258 страниц проверено алгоритмом замены страниц
        8 циклов алгоритма замены страниц
   175846 страниц освобождено алгоритмом замены страниц
    18975 операций возврата
        0 неудачных захватов блокировок
       40 задержек из-за ожидания свободной страницы
        0 задержек, связанных с расширенным XPT
    16984 ожидающих операций ввода-вывода
   186443 запущенных операций ввода-вывода
   186443 выполненных операций ввода-вывода
141695229 переключений контекста процессора
317690215 прерываний устройств
        0 программных прерываний
        0 условных прерываний
 55102397 системных вызовов
Число загруженных и выгруженных страниц отражает интенсивность обмена страницами с областью подкачки и постоянной памятью. Число загруженных и выгруженных страниц из пространства подкачки учитывает только страницы, хранящиеся в пространстве подкачки. Если операции ввода-вывода выполняются со значительной задержкой, хотя объем оперативной памяти достаточно велик, то, скорее всего, это связано с несбалансированной нагрузкой на диски. Для того чтобы узнать, связаны ли задержки с обращением к пространству подкачки или постоянной памяти, вызовите команду vmstat -s несколько раз и посмотрите, какую долю от общего числа операций загрузки и выгрузки страниц составляют операции обращения к пространству подкачки. Если интенсивность подкачки велика, воспользуйтесь командой vmtune (дополнительная информация приведена в разделе Настройка алгоритма замены страниц VMM с помощью команды vmtune). В некоторых случаях для повышения производительности достаточно создать несколько областей подкачки на разных томах. В остальных случаях рекомендуется увеличить объем оперативной памяти.
Команда ps позволяет получить информацию об использовании оперативной памяти для отдельного процесса. Команда ps vPID создает отчет с подробной информацией об использовании памяти указанным процессом. Этот отчет содержит:
Ниже приведен пример вывода команды:
# ps v PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND 36626 pts/3 A 0:00 0 316 408 32768 51 60 0.0 0.0 ps v
Ниже описаны те поля отчета команды ps, на которые стоит обратить внимание:
Примечание: Команда ps не позволяет узнать размер общих сегментов памяти и закрепленных сегментов памяти. Поскольку такие сегменты применяются многими приложениями, для оценки их размера рекомендуется вызвать команду svmon.
Команда svmon позволяет получить более подробную информацию об использовании памяти. В то же время, на ее выполнение затрачивается больше ресурсов системы, чем на выполнение команд vmstat и ps. Команда svmon собирает информацию о текущем состоянии оперативной памяти. Тем не менее, нельзя считать, что значения всех показателей были измерены в одно и то же время, поскольку эта команда выполняется в пользовательском режиме, допускающем прерывания.
Для того чтобы узнать, установлена ли в системе программа svmon, вызовите следующую команду:
# lslpp -lI perfagent.tools
Для вызова команды svmon необходимы права доступа пользователя root.
Если при вызове команды был задан интервал сбора данных (опция -i), то статистика будет выдаваться до тех пор, пока процесс команды не будет убит, либо пока не будет достигнуто указанное число интервалов сбора информации (если оно задано).
На основе собранной информации можно создать отчеты четырех типов:
В операционной системе AIX версии 4.3.3 и выше данная команда позволяет создать ряд дополнительных отчетов, в том числе:
Для поддержки 64-разрядных приложений в AIX версии 4.3.3 был изменен формат вывода команды svmon.
В операционных системах версии выше 4.3.3 данная команда позволяет получить ряд дополнительных отчетов, в том числе:
Для того чтобы просмотреть глобальную статистику, вызовите команду с флагом -G. В данном примере отчет будет создаваться пять раз с интервалом в две секунды.
# svmon -G -i 2 5
       п а м я т ь            з а н я т о   з а к р е п л е н о   п р  п о д к а ч к и
 разм. занято своб. закр. рабоч. пост. клнт. рабоч. пост. клнт.  разм.   занято
 16384 16250   134  2006  10675  2939  2636   2006     0     0    40960   12674
 16384 16254   130  2006  10679  2939  2636   2006     0     0    40960   12676
 16384 16254   130  2006  10679  2939  2636   2006     0     0    40960   12676
 16384 16254   130  2006  10679  2939  2636   2006     0     0    40960   12676
 16384 16254   130  2006  10679  2939  2636   2006     0     0    40960   12676
Ниже описаны поля отчета команды svmon:
В данном примере оперативная память содержит 16384 страницы. Для того чтобы узнать общий объем оперативной памяти, это значение нужно умножить на 4096 (получится 64 Мб). 16250 страниц занято, 134 страницы находятся в списке свободных страниц, и 2006 страниц закреплены в оперативной памяти. Среди занятых страниц 10675 страниц относятся к рабочим сегментам памяти, 2939 страниц относятся к сегментам постоянной памяти, а 2636 страниц являются страницами клиентов. Сумма этих трех значений дает значение занято из раздела память. В разделе занято указано, какая часть закрепленных страниц являются рабочими, постоянными и клиентскими. Сумма этих трех значений равна значению закр. из раздела память. Пространство подкачки содержит 40960 страниц (160 Мб), 12676 из которых занято. Как правило, значение занято из раздела память больше значения занято из раздела пр. подкачки, так как страницы файлов не освобождаются после завершения программы, в отличие от страниц, выделенных из пространства подкачки.
В операционной системе AIX версии 4.3.3 или выше вывод аналогичной команды выглядит следующим образом:
# svmon -G -i 2 5
 
              разм.      занято      своб.      закр.     вирт.
память        65527      64087       1440       5909      81136
пр. подкачки 131072      55824
 
               рабоч.    пост.       клнт.
закреплено     5918          0          0
занято        47554      13838       2695
 
 
               разм.     занято      своб.      закр.     вирт.
память        65527      64091       1436       5909      81137
пр. подкачки 131072      55824
 
               рабоч.     пост.      клнт.
закреплено     5918          0          0
занято        47558      13838       2695
 
 
              разм.      занято      своб.      закр.     вирт.
память        65527      64091       1436       5909      81137
пр. подкачки 131072      55824
 
               рабоч.     пост.      клнт.
закреплено     5918          0          0
занято        47558      13838       2695
 
 
              разм.      занято      своб.      закр.     вирт.
память        65527      64090       1437       5909      81137
пр. подкачки 131072      55824
 
               рабоч.     пост.      клнт.
закреплено     5918          0          0
занято        47558      13837       2695
 
 
               разм.     занято      своб.      закр.     вирт.
память        65527      64168       1359       5912      81206
пр. подкачки 131072      55824
 
               рабоч.     пост.      клнт.
закреплено     5921          0          0
занято        47636      13837       2695
Вывод команды содержит одно дополнительное поле вирт., в котором указывается число страниц, выделенных из виртуальной памяти системы.
Приведенная ниже команда выдает статистику использования памяти для десяти процессов, занимающих больше всего памяти. Если число процессов не указано, то команда выдает информацию для всех процессов, выполняющихся в системе.
# svmon -Pau 10
 
  Pid                        Команда         Занято      Закр.     Пр. подкачки
15012                     maker4X.exe         4783       1174         4781
 2750                               X         4353       1178         5544
15706                            dtwm         3257       1174         4003
17172                       dtsession         2986       1174         3827
21150                          dtterm         2941       1174         3697
17764                         aixterm         2862       1174         3644
 2910                          dtterm         2813       1174         3705
19334                          dtterm         2813       1174         3704
13664                          dtterm         2804       1174         3706
17520                         aixterm         2801       1174         3619
 
Pid:  15012
Команда:  maker4X.exe
 
ИД сег. Тип   Описание            Занято  Закр. Пр.подк. Диапазон адресов
 1572  пост. /dev/hd3:62              0      0        0  0..-1
  142  пост. /dev/hd3:51              0      0        0  0..-1
 1bde  пост. /dev/hd3:50              0      0        0  0..-1
  2c1  пост. /dev/hd3:49              1      0        0  0..7
  9ab  пост. /dev/hd2:53289           1      0        0  0..0
  404  раб.  расширение ядра         27     27        0  0..24580
 1d9b  раб.  данные библиотеки       39      0       23  0..607
  909  раб.  код общей библиотеки    64      0        7  0..65535
  5a3  раб.  sreg[4]                  9      0       12  0..32768
 1096  раб.  sreg[3]                 32      0       32  0..32783
 1b9d  раб.  личный сегмент        1057      1     1219  0..1306 : 65307..65535
 1af8  клнт                         961      0        0  0..1716
    0  раб.  ядро                  1792   1146     3488  0..32767 : 32768..65535
...
Вывод команды содержит разделы с итоговой и подробной информацией. В разделе с итоговой информацией указан список из десяти процессов, занимающих больше всего памяти (в порядке убывания объема используемой памяти).
Процесс с pid 15012 занимает больше всего памяти. В столбце Команда указывается имя команды, в данном случае - maker4X.exe. В столбце Занято указывается общее число страниц физической памяти, расположенных в сегментах процесса. В данном случае оно равно 4783 (размер страницы равен 4 Кб). В столбце Закр. указывается общее число закрепленных страниц, расположенных в сегментах процесса. В данном случае оно равно 1174. В столбце Пр. подкачки указывается общее число страниц пространства подкачки, выделенных процессу. В данном случае оно равно 4781.
Во втором разделе вывода содержится информация о сегментах процессов, указанных в первом разделе вывода. Эта информация включает ИД сегмента, тип сегмента, его описание (содержащее имя тома и i-узел файла в случае сегмента постоянной памяти), число страниц в оперативной памяти, число закрепленных страниц в оперативной памяти, число страниц в пространстве подкачки и диапазон адресов.
В поле Диапазон адресов указывается один диапазон для сегментов постоянной памяти и сегментов клиентов, и два диапазона для рабочих сегментов. Диапазон адресов сегментов постоянной памяти и сегментов клиентов имеет вид '0..x,' где x - максимальное число виртуальных страниц, когда либо выделявшихся процессу. Для рабочих сегментов указывается значение вида '0..x : y..65535', где диапазон 0..x содержит глобальные данные, а диапазон y..65535 содержит стек. У первого диапазона изменяется правая граница, а у второго - левая. Таким образом, пространство адресов рабочего сегмента представляет собой два диапазона, которые увеличиваются на встречу друг другу. Все вышесказанное относится только к личным рабочим сегментам процесса и не относится к сегментам ядра и общих библиотек. В данном примере личный рабочий сегмент процесса имеет номер 1b9d. Его диапазон адресов равен 0..1306 : 65307..65535. Сегмент 909 является рабочим сегментом, в котором хранится код общей библиотеки. Его диапазон адресов равен 0..65535.
Некоторые сегменты могут применяться несколькими процессами. В этом случае все страницы из этого сегмента будут прибавлены к значению Занято каждого из процессов. Таким образом, сумма всех значений Занято может быть больше общего числа страниц физической памяти. То же самое относится к полям Пр. подкачки и Закр.. Сумма значений Занято, Закр. и Пр. подкачки отдельных сегментов процесса равна итоговым значениям, указанным в первом разделе вывода.
Для того чтобы узнать, какой файл связан с указанным i-узлом, вызовите одну из следующих команд:
Для получения аналогичной информации в системе AIX версии 4.3.3 и выше вызовите следующую команду:
# svmon -Put 10
 
------------------------------------------------------------------------------
     Pid Команда        Занято     Pin  Пр.подк.    Вирт.  64-разр.  Нить
    2164 X              15535     1461    34577    37869        N        N
 
 Вирт.ИД Факт.ИД Тип  Описание           Занято  Закр Пр.подк Вирт.  Диап. адресов
  1966        2 раб. личный сегмент         9984     4 31892 32234   0..32272 :
                                                                    65309..65535
  4411        d раб. код общей библиотеки   3165     0 1264  1315   0..65535
     0        0 раб. сегмент ядра           2044  1455 1370  4170   0..32767 :
                                                                    65475..65535
  396e        1 пост. код,/dev/hd2:18950     200     0    -     -   0..706
  2ca3        - раб.                          32     0    0    32   0..32783
  43d5        - раб.                          31     0    6    32   0..32783
  2661        - раб.                          29     0    0    29   0..32783
  681f        - раб.                          29     0   25    29   0..32783
  356d        f раб. данные общей библиотеки  18     0   18    24   0..310
  34e8        3 раб. shmat/mmap                2     2    2     4   0..32767
  5c97        - пост. /dev/hd4:2               1     0    -     -   0..0
  5575        - пост. /dev/hd2:19315           0     0    -     -   0..0
  4972        - пост. /dev/hd2:19316           0     0    -     -   0..5
  4170        - пост. /dev/hd3:28              0     0    -     -   0..0
  755d        - пост. /dev/hd9var:94           0     0    -     -   0..0
  6158        - пост. /dev/hd9var:90           0     0    -     -   0..0
 
------------------------------------------------------------------------------
     Pid Команда        Занято     Pin  Пр.подк.    Вирт.  64-разр.  Нить
   25336 austin.ibm.    12466     1456     2797    11638        N        N
 
 Вирт.ИД Факт.ИД Тип  Описание           Занято  Закр Пр.подк Вирт.  Диап. адресов
  14c3        2 раб. личный сегмент         5644     1  161  5993   0..6550 :
                                                                    65293..65535
  4411        d раб. код общей библиотеки   3165     0 1264  1315   0..65535
     0        0 раб. сегмент ядра           2044  1455 1370  4170   0..32767 :
                                                                    65475..65535
  13c5        1 клнт код                     735     0    -     -   0..4424
   d21        - пост. /dev/andy:563          603     0    -     -   0..618
   9e6        f раб. данные общей библиотеки 190     0    2   128   0..3303
   942        - пост. /dev/cache:16           43     0    -     -   0..42
  2ca3        - раб.                          32     0    0    32   0..32783
  49f0        - клнт.                         10     0    -     -   0..471
  1b07        - пост. /dev/andy:8568           0     0    -     -   0..0
   623        - пост. /dev/hd2:22539           0     0    -     -   0..1
  2de9        - клнт.                          0     0    -     -   0..0
  1541        5 отобр. отображен в sid 761b    0     0    -     -
  5d15        - пост. /dev/andy:487            0     0    -     -   0..3
  4513        - пост. /dev/andy:486            0     0    -     -   0..45
   cc4        4 отобр. отображен в sid 803     0     0    -     -
  242a        - пост. /dev/andy:485            0     0    -     -   0..0
...
В столбце Вирт.ИД указывается ИД виртуального сегмента, а в столбце Факт.ИД - фактический ИД сегмента. Фактический ИД сегмента задает регистр сегмента, который применяется для доступа к страницам сегмента.
Опция -D позволяет получить статистику использования памяти в отдельных сегментах.
# svmon -D 404
ИД сегм.:  404
Тип:  рабочий
Описание:  расширение ядра
Диапазон адресов:  0..24580
Выделено в пространстве подкачки: 0 страниц ( 0,0 Мб)
Занято:  28 страниц ( 0,1 Мб)
  Страница  Физ. стр. Закр. Обращ.  Изменение
   12294    3320      закр   обращ    изм
   24580    1052      закр   обращ    изм
   12293   52774      закр   обращ    изм
   24579   20109      закр   обращ    изм
   12292   19494      закр   обращ    изм
   12291   52108      закр   обращ    изм
   24578   50685      закр   обращ    изм
   12290   51024      закр   обращ    изм
   24577    1598      закр   обращ    изм
   12289   35007      закр   обращ    изм
   24576     204      закр   обращ    изм
   12288     206      закр   обращ    изм
    4112   53007      закр            изм
    4111   53006      закр            изм
    4110   53005      закр            изм
    4109   53004      закр            изм
    4108   53003      закр            изм
    4107   53002      закр            изм
    4106   53001      закр            изм
    4105   53000      закр            изм
    4104   52999      закр            изм
    4103   52998      закр            изм
    4102   52997      закр            изм
    4101   52996      закр            изм
    4100   52995      закр            изм
    4099   52994      закр            изм
    4098   52993      закр            изм
    4097   52992      закр   обращ    изм
Ниже описаны поля вывода команды:
Из пространства подкачки не выделена ни одна страница памяти, так как все страницы закреплены в физической памяти.
Ниже приведен пример вывода команды в системе AIX версии 4.3.3 или выше:
# svmon -D 629 -b
 
ИД сегм.: 629
Тип:  рабочий
Диапазон адресов: 0..77
Выделено в пространстве подкачки: 7 страниц (0,0 Мб)
Выделено в виртуальной памяти: 11 страниц (0,0 Мб)
Занято: 7 страниц (0,0 Мб)
 
          Страница  Физ. стр. Закр.    Обращ.  Изменение
              0      32304     Нет        Да         Да
              3      32167     Нет        Да         Да
              7      32321     Нет        Да         Да
              8      32320     Нет        Да         Да
              5      32941     Нет        Да         Да
              1      48357     Нет        Нет        Да
             77      47897     Нет        Нет        Да
Вызвав команду с флагом -b, можно просмотреть флаги обращения к страницам и изменения страниц. После вывода этой информации флаг обращения к странице сбрасывается. Если дополнительно будет указана опция -i, то флаг обращения будет установлен для тех страниц, к которым процесс обращался в течение последнего интервала сбора данных.
Примечание: Этот флаг следует указывать только в случае крайней необходимости, так как он влияет на производительность системы.
Команда с опцией -S позволяет получить список сегментов, отсортированных в порядке убывания объема занимаемой памяти. Если число сегментов не указано, то по умолчанию выводится список из 10 сегментов. Приведенная ниже команда сортирует системные и прочие сегменты по числу страниц, находящихся в физической памяти, и выводит первые 10 элементов получившегося списка.
# svmon -Sau
 
ИД сег. Тип   Описание            Занято  Закр. Пр.подк. Диапазон адресов
    0  раб.  ядро                  1990   1408     3722  0..32767 : 32768..65535
    1  раб.  личный, pid=4042      1553      1     1497  0..1907 : 65307..65535
 1435  раб.  личный, pid=3006      1391      3     1800  0..4565 : 65309..65535
 11f5  раб.  личный, pid=14248     1049      1     1081  0..1104 : 65307..65535
 11f3  клнт.                        991      0        0  0..1716
  681  клнт.                        960      0        0  0..1880
  909  раб.  код общей библиотеки   900      0        8  0..65535
  101  раб.  данные VMM             497    496        1  0..27115 : 43464..65535
  a0a  раб.  данные общей библиот.  247      0      718  0..65535
 1bf9  раб.  личный, pid=21094      221      1      320  0..290 : 65277..65535
Поля вывода команды описаны в предыдущих примерах.
Ниже приведен пример вывода аналогичной команды, запущенной в системе AIX версии 4.3.3 или выше:
# svmon -Sut 10
 
 Вирт.ИД Факт.ИД Тип  Описание           Занято  Закр Пр.подк Вирт. Диап. адресов
  1966        - раб.                        9985     4 31892 32234   0..32272 :
                                                                    65309..65535
  14c3        - раб.                        5644     1  161  5993   0..6550 :
                                                                    65293..65535
  5453        - раб.                        3437     1 2971  4187   0..4141 :
                                                                    65303..65535
  4411        - раб.                        3165     0 1264  1315   0..65535
  5a1e        - раб.                        2986     1   13  2994   0..3036 :
                                                                    65295..65535
  340d        - раб.  таблицы ядра          2643     0  993  2645   0..15038 :
                                                                    63488..65535
  380e        - раб.  закр. куча ядра       2183  1055 1416  2936   0..65535
     0        - раб.  сегмент ядра          2044  1455 1370  4170   0..32767 :
                                                                    65475..65535
  6afb        - пост. /dev/notes:92         1522     0    -     -   0..10295
  2faa        - клнт.                       1189     0    -     -   0..2324
Отчеты команд svmon и vmstat связаны между собой. Ниже приведен пример отчета команды svmon, запущенной в AIX 4.3.2 (в AIX 4.3.3 и выше команда выдает те же данные, но в другом формате):
# svmon -G
       п а м я т ь            з а н я т о   з а к р е п л е н о   п р  п о д к а ч к и
 разм. занято своб.  закр. рабоч. пост. клнт. рабоч. пост. клнт.  разм.   занято
 16384 16254   130  2016  11198  2537  2519   2016     0     0    40960   13392
Команда vmstat была запущена в другом окне параллельно с командой svmon. Ниже приведен пример отчета vmstat:
# vmstat 5 нити память страница ошибки cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 0 0 13392 130 0 0 0 0 2 0 125 140 36 2 1 97 0 0 0 13336 199 0 0 0 0 0 0 145 14028 38 11 22 67 0 0 0 13336 199 0 0 0 0 0 0 141 49 31 1 1 98 0 0 0 13336 199 0 0 0 0 0 0 142 49 32 1 1 98 0 0 0 13336 199 0 0 0 0 0 0 145 49 32 1 1 99 0 0 0 13336 199 0 0 0 0 0 0 163 49 33 1 1 92 6 0 0 13336 199 0 0 0 0 0 0 142 49 32 0 1 98 0
Глобальный отчет команды svmon содержит аналогичные значения. Поле fre в выводе команды vmstat соответствует полю своб. из раздела память вывода команды svmon. Объем активной виртуальной памяти в выводе команды vmstat (поле avm) соответствует полю занято в пространстве подкачки в выводе команды svmon (13392).
В системах AIX версии младше 4.3.2 значение avm из вывода команды vmstat совпадает со значением занято из раздела пр. подкачки вывода команды svmon. В AIX 4.3.2 и выше применяется алгоритм выделения пространства подкачки с отсрочкой. В связи с этим в выводе команды svmon указывается число страниц, выгруженных в пространство подкачки, а в выводе команды vmstat - число страниц, к которым обратился процесс (не все из них выгружаются в пространство подкачки; за дополнительной информацией обратитесь к разделу Применение пространства подкачки и виртуальной памяти).
Отчеты команд svmon и ps связаны между собой. Ниже приведен пример отчета команды svmon, запущенной в AIX 4.3.2 (в AIX 4.3.3 и выше команда выдает те же данные, но в другом формате):
# svmon -P 7226 Pid Команда Занято Закр. Пр. подкачки 7226 telnetd 936 1 69 Pid: 7226 Команда: telnetd ИД сег. Тип Описание Занято Закр. Пр.подк. Диапазон адресов 828 пост. /dev/hd2:15333 0 0 0 0..0 1d3e раб. данные библиотеки 0 0 28 0..559 909 раб. код общей библиотеки 930 0 8 0..65535 1cbb раб. sreg[3] 0 0 1 0..0 1694 раб. личный сегмент 6 1 32 0..24 : 65310..65535 12f6 пост. код,/dev/hd2:69914 0 0 0 0..11
Для сравнения ниже приведен пример отчета команды ps:
# ps v 7226 PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND 7226 - A 0:00 51 240 24 32768 33 0 0.0 0.0 telnetd
Поле SIZE указывает размер области данных процесса, расположенной в пространстве подкачки (в Кб). Это значение, поделенное на 4, дает число страниц из рабочего сегмента памяти, к которым обращался процесс (то есть число страниц, выделенных в пространстве подкачки). Коэффициент равен 1/4, так как размер страницы равен 4 Кб, а в поле SIZE указывается значение в килобайтах. Если некоторые страницы из рабочего сегмента были выгружены на диск, то это значение будет больше объема занятой физической памяти. Значение SIZE (240) равно сумме значений Пр. подк., указанных в строках личный сегмент (32) и данные библиотеки (28) вывода команды svmon, умноженной на 4.
Значение RSS задает объем физической памяти (постоянной памяти), занятой процессом, в килобайтах. Это значение равно числу страниц из рабочего сегмента памяти и из сегмента кода программы, находящихся в оперативной памяти, умноженному на 4. Не забывайте, что сегмент кода программы применяется всеми запущенными экземплярами программы. Если запущено 26 процессов ksh, в оперативной памяти будет находиться только одна копия страниц с исполняемым кодом ksh, однако в выводе команды ps размер этих страниц будет прибавлен к значению RSS всех экземпляров программы ksh. Значение RSS (24) равно сумме значений занято, указанных в строках личный сегмент (6), сегмент кода (0) и данные библиотеки (0) вывода команды svmon, умноженной на 4.
Значение TRS задает размер резидентной (размещенной в физической памяти) командной части программы. Это значение равно числу страниц с кодом программы, умноженному на четыре. Как было отмечено ранее, это значение искажает фактический объем памяти, занятый программой, если запущено несколько экземпляров программы. Это значение не учитывает размер общего сегмента кода процесса. Значение TRS (0) равно значению занято (0), указанному в строке сегмент кода вывода команды svmon, умноженному на четыре. Значение TRS может превосходить значение TSIZ за счет того, что сегмент с кодом программы может содержать не только текст программы, но и заголовок XCOFF, а также описание загружаемых библиотек.
Указанные выше значения связаны между собой следующими соотношениями:
SIZE = 4 * (Пр. подк. для сегмента данных библиотеки и личного сегмента) RSS = 4 * (Занято для сегмента данных библиотеки, личного сегмента и сегмента кода) TRS = 4 * Занято для сегмента кода
Минимальный объем памяти, необходимый для работы программы, можно вычислить по следующей формуле:
Общее число страниц (размером 4 Кб) = T + ( N * ( PD + LD )) + F
где:
Для того чтобы получить объем памяти в килобайтах, умножьте полученное значение на 4. К полученному значению можно добавить размер сегментов ядра, расширения ядра и текстовых сегментов общих библиотек, однако учтите, что эти сегменты применяются всеми процессами системы. Например, некоторые приложения, в частности, CATIA и базы данных, применяют очень большие модули общих библиотек. Поскольку эта формула вычисляется на основе показателей использования памяти, измеренных один раз в течение работы процесса, полученный результат не всегда дает правильную оценку минимального размера рабочего набора процесса. Для того чтобы получить более точный результат, необходимо воспользоваться утилитой rmss, либо измерить показатели использования памяти несколько раз в течение работы процесса, а затем подсчитать средние значения (за дополнительной информацией обратитесь к разделу Оценка необходимого объема памяти с помощью команды rmss).
Для того чтобы определить минимальный объем памяти, необходимый для работы программы pacman, описанной в разделе Определение программ с утечками памяти, нужно подсчитать значение по следующей формуле:
В результате получим: Число страниц = 2 + (N * (1632+ 12)) + 1 = 1644 * N + 3.