4.6. Информация, ориентированная на Red Hat Enterprise Linux

Ввиду сложности, присущей операционным системам с подкачкой по требованию, следить за ресурсами, связанными с памятью, в Red Hat Enterprise Linux не так просто. Поэтому для начала лучше рассмотреть более примитивные средства.

С помощью free можно получить краткий (и несколько упрощённый) обзор использования памяти и подкачки. Например:

             total       used       free     shared    buffers     cached
Mem:       1288720     361448     927272          0      27844     187632
-/+ buffers/cache:     145972    1142748
Swap:       522104          0     522104
      

Заметим, что в данном компьютере 1,2 Гбайт ОЗУ, из которых фактически используется всего около 350 МБайт. Как и следует ожидать, при таком объёме свободной памяти, раздел подкачки размером 500 Мбайт не используется.

Сравните этот пример со следующим:

             total       used       free     shared    buffers     cached
Mem:        255088     246604       8484          0       6492     111320
-/+ buffers/cache:     128792     126296
Swap:       530136     111308     418828
      

В данном компьютере около 256 Мбайт памяти, причём почти вся память занята, свободно всего 8 Мбайт. Кроме этого в разделе подкачки объёмом 512 Мбайт занято больше 100 Мбайт. Хотя в плане памяти второй компьютер определённо более ограничен, чем первый, чтобы определить, вызывает ли это ограничение памяти проблемы производительности, мы должны посмотреть немного глубже.

Для этого можно воспользоваться командой vmstat, которая выводит больше, чем просто показатели использования памяти, хотя и в менее понятной форме, чем free. Ниже показан результат команды vmstat 1 10:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 2  0  0 111304   9728   7036 107204   0   0     6    10  120    24  10   2  89
 2  0  0 111304   9728   7036 107204   0   0     0     0  526  1653  96   4   0
 1  0  0 111304   9616   7036 107204   0   0     0     0  552  2219  94   5   1
 1  0  0 111304   9616   7036 107204   0   0     0     0  624   699  98   2   0
 2  0  0 111304   9616   7052 107204   0   0     0    48  603  1466  95   5   0
 3  0  0 111304   9620   7052 107204   0   0     0     0  768   932  90   4   6
 3  0  0 111304   9440   7076 107360  92   0   244     0  820  1230  85   9   6
 2  0  0 111304   9276   7076 107368   0   0     0     0  832  1060  87   6   7
 3  0  0 111304   9624   7092 107372   0   0    16     0  813  1655  93   5   2
 2  0  2 111304   9624   7108 107372   0   0     0   972 1189  1165  68   9  23
      

Во время этой 10-секундной выборки объём свободной памяти (поле free) несколько меняется и наблюдается небольшая активность ввода/вывода, связанная с подкачкой, (поля si и so), но в целом система работает хорошо. Однако возникают сомнения по поводу того, как этот компьютер справится с дополнительной нагрузкой, учитывая текущее использование памяти.

Исследуя вопросы, связанные с памятью, часто необходимо определить, как подсистема виртуальной памяти Red Hat Enterprise Linux использует память компьютера. С помощью sar вы можете изучить этот аспект производительности системы ещё более подробно.

Отчёт sar -r позволяет нам ещё глубже рассмотреть использование памяти и подкачки:

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/22/2003

12:00:01 AM kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached
12:10:00 AM    240468   1048252     81.34         0    133724    485772
12:20:00 AM    240508   1048212     81.34         0    134172    485600
…
08:40:00 PM    934132    354588     27.51         0     26080    185364
Average:       324346    964374     74.83         0     96072    467559
      

Поля kbmemfree и kbmemused показывают обычную статистику свободной и занятой памяти, а в поле %memused показан процент используемой памяти. Поля kbbuffers и kbcached показывают, сколько килобайт памяти выделено для буферов и кэша данных на уровне системы.

Поле kbmemshrd в системах с ядром Linux версии 2.4 (в частности, в Red Hat Enterprise Linux) всегда равно 0.

Строки этого отчёта были обрезаны, чтобы они уместились на странице. Вот как выглядят окончания этих строк (для облегчения восприятия слева добавлено время выборки):

12:00:01 AM   kbswpfree kbswpused  %swpused
12:10:00 AM      522104         0      0.00
12:20:00 AM      522104         0      0.00
…
08:40:00 PM      522104         0      0.00
Average:         522104         0      0.00
      

Поля kbswpfree и kbswpused показывают объём свободного и используемого пространства подкачки (в килобайтах), а поле %swpused показывает процент используемого пространства подкачки.

Больше узнать о работе подсистемы подкачки вам позволит отчёт sar -W. Взгляните на пример этого отчёта:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pswpin/s pswpout/s
12:10:01 AM      0.15      2.56
12:20:00 AM      0.00      0.00
…
03:30:01 PM      0.42      2.56
Average:         0.11      0.37
      

Здесь мы замечаем, что в среднем из пространства подкачки загружается в три раза меньше страниц (pswpin/s), чем выгружается из памяти (pswpout/s).

Чтобы лучше понять, как используются страницы, обратитесь к отчёту sar -B:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pgpgin/s pgpgout/s  activepg  inadtypg  inaclnpg  inatarpg
12:10:00 AM      0.03      8.61    195393     20654     30352     49279
12:20:00 AM      0.01      7.51    195385     20655     30336     49275
…
08:40:00 PM      0.00      7.79     71236      1371      6760     15873
Average:       201.54    201.54    169367     18999     35146     44702
      

Здесь мы можем определить, сколько блоков в секунду подкачивается с диска (pgpgin/s) и сколько выгружается на диск (pgpgout/s). Эти показатели являются своего рода барометром общей активности виртуальной памяти.

Но изучив другие поля этого отчёта, можно узнать ещё больше. Ядро Red Hat Enterprise Linux помечает все страницы как активные или неактивные. Как и следует из названия, активные страницы в данный момент используются некоторым образом (например, это страницы процессов или буферов), тогда как неактивные страницы не используются. Этот пример отчёта показывает, что объём активных страниц (поле activepg) в среднем равен 660 Мбайт [1].

Остальные поля этого отчёта посвящены списку неактивных страниц — страниц, которые по той или иной причине, в последнее время не использовались. Поле inadtypg показывает количество «грязных» (изменённых) неактивных страниц, которые, возможно, необходимо записать на диск. Поле inaclnpg, напротив, показывает число «чистых» (неизменённых) неактивных страниц, которые не нужно записывать на диск.

Поле inatarpg представляет желательный объём неактивных страниц. Это значение вычисляется ядром Linux таким образом, чтобы список неактивных страниц имел достаточный размер для использования его при необходимости для замены страниц.

Чтобы больше узнать о состоянии страниц (и особенно о том, как это состояние меняется), воспользуйтесь отчётом sar -R. Вот как выглядит этот отчёт:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM   frmpg/s   shmpg/s   bufpg/s   campg/s
12:10:00 AM     -0.10      0.00      0.12     -0.07
12:20:00 AM      0.02      0.00      0.19     -0.07
…
08:50:01 PM     -3.19      0.00      0.46      0.81
Average:         0.01      0.00     -0.00     -0.00
      

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

В данном примере, последняя выборка несколько отличается от трёх других числом страниц, выделяемых из списка свободных за секунду (поле frmpg/s) и числом страниц (около 1), добавляемых за секунду в кэш страниц (поле campg/s). В список страниц, используемых в качестве буфера, (поле bufpg/s) добавляется примерно одна страница за две секунды, тогда как объём страниц разделяемой памяти (поле shmpg/s) не меняется.

Замечания

[1]

Размер страницы в Red Hat Enterprise Linux на платформе x86, использованной в этом примере, составляет 4096 байт. В компьютерах, основанных на других платформах, размер страницы может быть другим.