Использование памяти процессами

Команда svmon -P позволяет просмотреть статистику использования памяти для всех запущенных процессов системы.

Ниже приведен пример вывода команды svmon -P:
# svmon -P

--------------------------------------------------------------------------------
     Pid Command          Inuse        Pin     Pgsp    Virtual 64-bit Mthrd 16MB
   16264 IBM.ServiceRM    10075     3345     3064    13310      Н     Д     Н

     Разм.Стр.     Занято      Закр.   Пр.пдкчк. Виртуальн.
     мал.  4 KB     10075       3345       3064      13310
     L  16 МБ          0          0          0          0

    Vsid      Esid Тип  Описание                 PSize  Inuse   Pin Pgsp Virtual
   f001e         d раб. текст общ. библ.             s   4857     0   36  6823 
       0         0 раб. сегм. ядра                   s   4205  3335 2674  5197 
   b83f7         2 раб. частн. процесс               s    898     2  242  1098 
   503ea         f раб. данные общ. библ.            s     63     0   97   165 
   c8439         1 лич. код,/dev/hd2:149841          s     28     0    -     - 
   883f1         - раб.                              s     21     8   14    26 
   e83dd         - лич. /dev/hd2:71733               s      2     0    -     - 
   f043e         4 раб. сегм. общ. пам.              s      1     0    1     1 
   c0438         - лич. больш. файл /dev/hd9var:243  s      0     0    -     - 
   b8437         3 свз. связ. с sid a03f4            s      0     0    -     - 
   583eb         - лич. больш. файл /dev/hd9var:247  s      0     0    -     - 

--------------------------------------------------------------------------------
     Pid Command          Inuse        Pin     Pgsp    Virtual 64-bit Mthrd 16MB
   17032 IBM.CSMAgentR     9791     3347     3167    12944      Н     Д     Н

     Разм.Стр.     Занято      Закр.   Пр.пдкчк. Виртуальн.
     мал. 4 KB       9791      3347        3167      12944
     L  16 МБ          0          0          0          0

    Vsid      Esid Тип  Описание                 PSize  Inuse   Pin Pgsp Virtual
   f001e         d раб. текст общ. библ.             s   4857     0   36  6823 
       0         0 раб. сегм. ядра                   s   4205  3335 2674  5197 
     400         2 раб. частн. процесс               s    479     2  303   674 
   38407         f раб. данные общ. библ.            s    120     0  127   211 
   a83f5         1 лич. код,/dev/hd2:149840          s     99     0    -     - 
   7840f         - раб.                              s     28    10   27    39 
   e83dd         - лич. /dev/hd2:71733               s      2     0    -     - 
   babf7         - лич. /dev/hd2:284985              s      1     0    -     - 
   383e7         - лич. больш. файл /dev/hd9var:186  s      0     0    -     - 
   e03fc         - лич. больш. файл /dev/hd9var:204  s      0     0    -     - 
   f839f         3 свз. связ. с sid 5840b            s      0     0    -     - 
[...]
Вывод команды содержит подробные сведения как о глобальном использовании памяти процессами, так и сведения о том, как каждый процесс использует различные сегменты памяти. По умолчанию процессы сортируются по убыванию числа занятых страниц. Правило сортировки можно изменить с помощью команды svmon с любым из следующих флагов: -u, -p, -g или -v.

Просмотреть общие сведения о 15 процессах, использующих самый большой объем памяти системы, можно с помощью следующей команды:

# svmon -Pt15 | perl -e 'while(<>){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}'
--------------------------------------------------------------------------------
     Pid Command          Inuse        Pin     Pgsp    Virtual 64-bit Mthrd 16MB
   16264 IBM.ServiceRM    10075     3345     3064    13310      Н     Д     Н
   17032 IBM.CSMAgentR     9791     3347     3167    12944      Н     Д     Н
   21980 zsh               9457     3337     2710    12214      Н     Н     Н
   22522 zsh               9456     3337     2710    12213      Н     Н     Н
   13684 getty             9413     3337     2710    12150      Н     Н     Н
   26590 perl5.8.0         9147     3337     2710    12090      Н     Н     Н
    7514 sendmail          9390     3337     2878    12258      Н     Н     Н
   14968 rmcd              9299     3340     3224    12596      Н     Д     Н
   18940 ksh               9275     3337     2710    12172      Н     Н     Н
   14424 ksh               9270     3337     2710    12169      Н     Н     Н
    4164 errdemon          9248     3337     2916    12255      Н     Н     Н
    3744 cron              9217     3337     2770    12125      Н     Н     Н
   11424 rpc.mountd        9212     3339     2960    12290      Н     Д     Н
   21564 rlogind           9211     3337     2710    12181      Н     Н     Н
   26704 rlogind           9211     3337     2710    12181      Н     Н     Н

Процесс с pid 16264 занимает больше всего памяти. В столбце Команда указывается имя команды, в данном случае - IBM®.ServiceRM. В столбце Занято указывается общее число страниц физической памяти, расположенных в сегментах процесса. В данном случае оно равно 10075. Размер страницы - 4 КБ. В столбце Закр. указывается общее число закрепленных страниц, расположенных в сегментах процесса. В данном случае оно равно 3345. В столбце Пр. подкачки указывается общее число страниц пространства подкачки, выделенных процессу. В данном случае оно равно 3064. Столбец Вирт. (общее число страниц виртуальной памяти процесса) содержит значение 13310.

Во втором разделе вывода содержится информация о сегментах процессов, указанных в первом разделе вывода. К ним относятся идентификаторы виртуальных (ВСег) и эффективных (Эсег) сегментов. Значение ЭСег соответствует реестру сегментов, который применяется для доступа к соответствующим страницам. Эта информация включает в себя тип сегмента и его описание (содержащее имя тома и i-узел файла в случае сегмента постоянной памяти). Кроме того, отчет содержит информацию о размере страниц сегмента, где s указывает на страницы по 4 КБ, а L - на страницы по 16 МБ, число страниц в оперативной памяти ( Занято), число закрепленных страниц в памяти (Закр.), число страниц в пространстве подкачки (Пр.пдкчк.), а также число виртуальных страниц (Виртуальн.).

Получить более подробную информацию можно с помощью дополнительных опций. Опция -j позволяет просмотреть полное имя файла для существующих сегментов. С помощью опции -l можно просмотреть подробные сведения о сегментах, а с помощью опции -r - диапазоны памяти, используемые каждым сегментом. Ниже приведен пример команды svmon с опциями -l, -r и -j:
# svmon -S f001e 400 e83dd -l -r -j

    Vsid      Esid Тип  Описание                 PSize  Inuse   Pin Pgsp Virtual
   f001e         d раб. текст общ. библ.             s   4857     0   36  6823 
                   Диап. адр.: 0..60123
                   Сегмент текста общ. библ.
     400         2 раб. частн. процесс               s    480     2  303   675 
                   Диап. адр.: 0..969 : 65305..65535
                   pid(s)=17032
   e83dd         - лич. /dev/hd2:71733               s      2     0    -     - 
                        /usr/lib/nls/loc/uconvTable/ISO8859-1                  
                   Диап. адр.: 0..1
                   pid(s)=17552, 17290, 17032, 16264, 14968, 9620

В поле Диапазон адресов указывается один диапазон для сегментов постоянной памяти и сегментов клиентов, и два диапазона для рабочих сегментов. Диапазон адресов сегментов постоянной памяти и сегментов клиентов имеет вид '0..x,' где x - максимальное число виртуальных страниц, когда либо выделявшихся процессу. Для рабочих сегментов указывается значение вида '0..x : y..65535', где диапазон 0..x содержит глобальные данные, а диапазон y..65535 содержит стек. У первого диапазона изменяется правая граница, а у второго - левая. Таким образом, пространство адресов рабочего сегмента представляет собой два диапазона, которые увеличиваются навстречу друг другу. Все вышесказанное относится только к личным рабочим сегментам процесса и не относится к сегментам ядра и общих библиотек.

В приведенном выше примере указан личный рабочий сегмент процесса 400; его диапазон адресов равен 0..969 : 65305..65535. В сегменте f001e хранится рабочий текстовый сегмент общей библиотеки; его диапазон равен 0..60123.

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

В приведенном выше примере сегмент e83dd используется несколькими процессами со следующими PID: 17552, 17290, 17032, 16264, 14968 и 9620.