[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по настройке производительности


Оценка необходимого объема памяти

Сведения об использовании памяти можно получить несколькими способами. Наиболее полезная информация содержится в выводе команд vmstat, ps и svmon.

Команда vmstat (оперативная память)

Команда 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 в выводе команды vmstat. Умножьте это значение на 4 Кб и сравните полученный результат с объемом оперативной памяти системы. В идеале значение, вычисленное на основе avm, должно быть меньше объема оперативной памяти. Если это не так, то в системе будет выполняться подкачка. Интенсивность подкачки зависит от разности между этими значениями. Основное назначение виртуальной памяти состоит в расширении адресного пространства системы (часть страниц виртуальной памяти хранится в оперативной памяти, а часть - в пространстве подкачки). Однако если объем виртуальной памяти будет намного превосходить объем физической памяти, то придется выполнять много операций подкачки, что приведет к значительным задержкам в работе системы. Если в системе выполняется подкачка, несмотря на то, что значение avm меньше объема оперативной памяти, то, скорее всего, оперативная память переполнена файловыми страницами. В этом случае число операций подкачки можно уменьшить, изменив значения minperm и maxperm (дополнительная информация приведена в разделе Настройка алгоритма замены страниц VMM с помощью команды vmtune).

Команда vmstat -I

В операционной системе AIX старше 4.3.3 предусмотрена команда vmstat -I (прописная i), позволяющая получить дополнительную информацию об использовании оперативной памяти, в том числе число файловых страниц, загружаемых в оперативную память и выгружаемых из оперативной памяти в секунду (другими словами, число операций загрузки и выгрузки страниц, не связанных с пространством подкачки). В выводе команды, вызванной с этим флагом, отсутствуют столбцы re и cy.

Команда vmstat -s

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

PGIN
Число операций чтения страниц, вызванных страничными ошибками. Поскольку все операции ввода-вывода связаны со страничными ошибками, данный параметр является основной характеристикой интенсивности ввода-вывода.

SIZE
Размер области данных процесса в пространстве подкачки в Кб (при вызове команды с другими флагами это значение указывается в поле SZ). Данное значение равно числу страниц из рабочего сегмента памяти, к которым обращался процесс, умноженному на 4. Если некоторые страницы из рабочего сегмента были выгружены на диск, то это значение будет больше объема физической памяти. Значение SIZE учитывает страницы из сегмента процесса и из сегмента данных общих библиотек, используемых процессом.

RSS
Объем физической памяти, занятой процессом, в килобайтах. Это значение равно числу страниц из рабочего сегмента памяти и из сегмента кода программы, находящихся в оперативной памяти, умноженному на 4. Не забывайте, что сегмент кода программы применяется всеми запущенными экземплярами программы. Если запущено 26 процессов ksh, в оперативной памяти будет находиться только одна копия страниц с исполняемым кодом ksh, однако в выводе команды ps размер этих страниц будет прибавлен к значению RSS всех экземпляров программы ksh.

TSIZ
Размер текста программы (общего для всех экземпляров программы). Эта величина представляет собой размер текстовой части исполняемого файла программы. Страницы с текстовой частью исполняемой программы загружаются в память только при обращении к этим страницам. Данная величина представляет собой максимальный объем текста, который может быть загружен в память. Значение TSIZ не отражает фактического объема занятой памяти. Значение TSIZ можно узнать и с помощью команды dump -ov, указав в качестве параметра исполняемый файл (например, dump -ov /usr/bin/ls).

TRS
Размер резидентной (размещенной в физической памяти) командной части программы. Это значение равно числу страниц с кодом программы, умноженному на 4. Это значение искажает фактический объем памяти, занятый программой, если запущено несколько экземпляров программы. Значение TRS может превосходить значение TSIZ за счет того, что сегмент с кодом программы содержит не только текст программы, но и заголовок XCOFF, а также описание загружаемых библиотек.

%MEM
Это значение указывает, какую долю (в процентах) от общего объема оперативной памяти компьютера составляет значение RSS. Оно характеризует долю физической памяти, занятой процессом. К сожалению, как и RSS, эта величина переоценивает загрузку памяти процессами, которые совместно используют командную часть программы. Кроме того, округление до ближайшего целого значения приводит к тому, что значение %MEM будет равно 0,0, если отношение RSS к объему оперативной памяти меньше 0,005.

Примечание: Команда ps не позволяет узнать размер общих сегментов памяти и закрепленных сегментов памяти. Поскольку такие сегменты применяются многими приложениями, для оценки их размера рекомендуется вызвать команду svmon.

Команда svmon

Команда svmon позволяет получить более подробную информацию об использовании памяти. В то же время, на ее выполнение затрачивается больше ресурсов системы, чем на выполнение команд vmstat и ps. Команда svmon собирает информацию о текущем состоянии оперативной памяти. Тем не менее, нельзя считать, что значения всех показателей были измерены в одно и то же время, поскольку эта команда выполняется в пользовательском режиме, допускающем прерывания.

Для того чтобы узнать, установлена ли в системе программа svmon, вызовите следующую команду:

# lslpp -lI perfagent.tools

Для вызова команды svmon необходимы права доступа пользователя root.

Если при вызове команды был задан интервал сбора данных (опция -i), то статистика будет выдаваться до тех пор, пока процесс команды не будет убит, либо пока не будет достигнуто указанное число интервалов сбора информации (если оно задано).

На основе собранной информации можно создать отчеты четырех типов:

Глобальный (-G)
Содержит информацию о том, какой суммарный объем физической памяти и пространства подкачки занят всеми процессами системы.

Процесс (-P)
Содержит информацию об использовании памяти активными процессами.

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

Подробный отчет о сегментах (-D)
Содержит подробную информацию об указанных сегментах.

В операционной системе AIX версии 4.3.3 и выше данная команда позволяет создать ряд дополнительных отчетов, в том числе:

Пользователь (-U)
Содержит информацию об использовании памяти для указанных пользователей. Если список имен не задан, то выводится информация для всех пользователей, определенных в системе.

Команда (-C)
Содержит информацию об объеме памяти, выделенном для процесса указанной команды.

Класс управления рабочей схемой (-W)
Содержит информацию об использовании памяти для указанных классов управления рабочей схемой. Если классы не заданы, то выводится информация для всех классов, определенных в системе.

Для поддержки 64-разрядных приложений в AIX версии 4.3.3 был изменен формат вывода команды svmon.

В операционных системах версии выше 4.3.3 данная команда позволяет получить ряд дополнительных отчетов, в том числе:

Страница (-F)
Содержит информацию об использовании страниц памяти. Если номер страницы не задан, то выводится доля занятой оперативной памяти в процентах. Если указан номер страницы, то выводится информация об этой странице.

Приоритет (-T)
Содержит информацию о приоритетах, в том числе значение приоритета, суперкласс (если задан флаг -a) и общее число страниц физической памяти, расположенных в сегментах с данным приоритетом.

Оценка объема занятой памяти

Для того чтобы просмотреть глобальную статистику, вызовите команду с флагом -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:

память
Статистическая информация об использовании физической памяти. Все значения представляют собой число страниц размером 4 Кб.

разм.
Общий размер памяти в страницах по 4 Кб.

занято
Число страниц оперативной памяти, занятых процессом, плюс число страниц постоянной памяти, принадлежащих завершенному процессу, и еще не выгруженных из памяти. Это значение равно разности между общим числом страниц в оперативной памяти и числом страниц в списке свободных страниц.

своб.
Число страниц в списке свободных страниц.

закр.
Число страниц, закрепленных в оперативной памяти (закрепленной называется страница, постоянно расположенная в оперативной памяти; такая страница не выгружается на диск).

 

занято
Статистическая информация об объеме занятой физической памяти. Все значения представляют собой число страниц размером 4 Кб.

рабоч.
Число рабочих страниц в оперативной памяти.

пост.
Число постоянных страниц в оперативной памяти.

клнт.
Число страниц клиентов в оперативной памяти (страница клиента - это страница удаленного файла).

 

закреплено
Статистическая информация об области физической памяти, содержащей закрепленные страницы. Все значения представляют собой число страниц размером 4 Кб.

рабоч.
Число рабочих страниц, закрепленных в оперативной памяти.

пост.
Число постоянных страниц, закрепленных в оперативной памяти.

клнт.
Число страниц клиентов, закрепленных в оперативной памяти.

 

пр. подкачки
Статистическая информация об использовании пространства подкачки. Все значения задают число страниц размером 4 Кб. Эта информация выводится только в том случае, если задан флаг -r. В AIX версии 4.3.2 и выше в этом разделе отчета указывается фактическое число страниц, занятых в пространстве подкачки (страниц, которые были выгружены в пространство подкачки). Это значение не совпадает со значением avm из вывода команды vmstat, задающим число страниц виртуальной памяти, к которым поступали обращения, так как не все такие страницы выгружаются на диск.

разм.
Общий размер пространства подкачки в страницах по 4 Кб.

занято
Общее число выделенных страниц.

 

В данном примере оперативная память содержит 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 и 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 и 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

где:

T
= Число страниц с текстом программы (общих для всех пользователей)

N
= Число одновременно выполняемых экземпляров программы

PD
= Число страниц в личном сегменте рабочей памяти процесса

LD
= Число страниц с данными общих библиотек, применяемых процессом

F
= Число страниц файлов (общих для всех пользователей)

Для того чтобы получить объем памяти в килобайтах, умножьте полученное значение на 4. К полученному значению можно добавить размер сегментов ядра, расширения ядра и текстовых сегментов общих библиотек, однако учтите, что эти сегменты применяются всеми процессами системы. Например, некоторые приложения, в частности, CATIA и базы данных, применяют очень большие модули общих библиотек. Поскольку эта формула вычисляется на основе показателей использования памяти, измеренных один раз в течение работы процесса, полученный результат не всегда дает правильную оценку минимального размера рабочего набора процесса. Для того чтобы получить более точный результат, необходимо воспользоваться утилитой rmss, либо измерить показатели использования памяти несколько раз в течение работы процесса, а затем подсчитать средние значения (за дополнительной информацией обратитесь к разделу Оценка необходимого объема памяти с помощью команды rmss).

Для того чтобы определить минимальный объем памяти, необходимый для работы программы pacman, описанной в разделе Определение программ с утечками памяти, нужно подсчитать значение по следующей формуле:

T
= 2 (значение Занято для сегмента код, /dev/lv01:12302 типа пост. сегмента памяти)

PD
= 1632 (значение Занято для личного сегмента типа раб.)

LD
= 12 (значение Занято для сегмента данных библиотеки типа раб.)

F
= 1 (значение Занято для сегмента /dev/hd2:53289 типа пост.

В результате получим: Число страниц = 2 + (N * (1632+ 12)) + 1 = 1644 * N + 3.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]