Сведения об использовании памяти можно получить несколькими способами. Наиболее полезная информация содержится в выводе команд 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.