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

Мониторинг пропускной способности и загрузки процессора в Red Hat Enterprise Linux подразумевает использование средств, обсуждаемых в главе 2 Мониторинг ресурсов; однако, если вы ещё не прочитали эту главу, сделайте это, прежде чем продолжить.

3.3.1. Мониторинг пропускной способности в Red Hat Enterprise Linux

Как было сказано в разделе 2.4.2 Мониторинг пропускной способности, непосредственно отследить, как используется пропускная способность, не просто. Однако, проанализировав показатели уровня устройств можно грубо оценить, удовлетворительна ли пропускная способность вашего компьютера.

С помощью vmstat вы можете определить, насколько интенсивно работают устройства в целом, посмотрев поля bi и bo; кроме этого, обратив внимание на поля si и so, вы сможете немного узнать о том, в какой мере активность диска вызвана механизмом подкачкой:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 248088 158636 480804   0   0     2     6  120   120  10   3  87
        

В данном примере поле bi показывает, что на блочные устройства (в основном это диски) записывается 2 блока в секунду, а поле bo показывает, что скорость чтения блочных устройств равна 6 блокам в секунду. Мы можем определить, что эта активность не связана с подкачкой, так как скорость связанного с подкачкой ввода/вывода, показанная в полях si и so составляет 0 Кбайт/сек.

С помощью iostat активность диска можно изучить на более глубоком уровне:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.34    4.60    2.83   87.24

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev8-0            1.10         6.21        25.08     961342    3881610
dev8-1            0.00         0.00         0.00         16          0
        

Из приведённого выше примера видно, что устройство со старшим номером 8 (а именно /dev/sda, первый SCSI-диск) в среднем выполняет чуть больше одной операции ввода/вывода в секунду (поле tsp). Большую часть этой активности составляют операции записи (поле Blk_wrtn), при этом скорость записи чуть больше 25 блоков в секунду (поле Blk_wrtn/s).

Если вам понадобятся дополнительные подробности, передайте iostat параметр -x:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.37    4.54    2.81   87.27

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz
/dev/sda    13.57   2.86  0.36  0.77   32.20   29.05    16.10    14.53    54.52
/dev/sda1    0.17   0.00  0.00  0.00    0.34    0.00     0.17     0.00   133.40
/dev/sda2    0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    11.56
/dev/sda3    0.31   2.11  0.29  0.62    4.74   21.80     2.37    10.90    29.42
/dev/sda4    0.09   0.75  0.04  0.15    1.06    7.24     0.53     3.62    43.01
        

Помимо того, что показанные выше строки содержат больше полей, первое, что следует заметить, это то, что теперь команда iostat показывает статистику в разрезе разделов. Если сопоставить с помощью df названия устройств с точками подключения, этот отчёт позволит определить, например, связана ли излишняя нагрузка с разделом, содержащим /home/.

Вообще строки, выводимые командой iostat -x, длиннее и содержат намного больше информации, ниже приведены окончания этих строк (для облегчения восприятия добавлен столбец с названием устройства):

Device:    avgqu-sz   await  svctm  %util
/dev/sda       0.24   20.86   3.80   0.43
/dev/sda1      0.00  141.18 122.73   0.03
/dev/sda2      0.00    6.00   6.00   0.00
/dev/sda3      0.12   12.84   2.68   0.24
/dev/sda4      0.11   57.47   8.94   0.17
        

Интересно, что в данном примере, /dev/sda2 — раздел подкачки, и судя по тому, что большинство показателей этого раздела равно 0.00, в данной системе подкачка не является проблемой.

Также интересно обратить внимание на /dev/sda1. Показатели этого раздела необычны, общая активность не кажется высокой, но почему тогда средний размер запроса ввода/вывода (поле avgrq-sz), среднее время ожидания (поле await) и среднее время обслуживания (поле svctm) намного больше, чем у других разделов? Это объясняется тем, что раздел содержит каталог /boot/, в котором находится ядро и начальный образ диска в памяти. В процессе загрузки системы выполняется чтение (обратите внимание, что не равны нулю только показатели rsec/s и rkB/s, обычно запись при загрузке не производится) большого числа блоков, поэтому iostat показывает относительно большое время ожидания и обслуживания.

Для просмотра статистики ввода/вывода за более длительный срок можно использовать sar, например sar -b выводит такой отчёт об операциях ввода/вывода:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       tps      rtps      wtps   bread/s   bwrtn/s
12:10:00 AM      0.51      0.01      0.50      0.25     14.32
12:20:01 AM      0.48      0.00      0.48      0.00     13.32
…
06:00:02 PM      1.24      0.00      1.24      0.01     36.23
Average:         1.11      0.31      0.80     68.14     34.79
        

Здесь, как и в исходном режиме команды iostat, показатели всех блочных устройств суммируются вместе.

Другой отчёт о вводе/выводе можно получить с помощью sar -d:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       DEV       tps    sect/s
12:10:00 AM    dev8-0      0.51     14.57
12:10:00 AM    dev8-1      0.00      0.00
12:20:01 AM    dev8-0      0.48     13.32
12:20:01 AM    dev8-1      0.00      0.00
…
06:00:02 PM    dev8-0      1.24     36.25
06:00:02 PM    dev8-1      0.00      0.00
Average:       dev8-0      1.11    102.93
Average:       dev8-1      0.00      0.00
        

Этот отчёт представляет менее подробные сведения, но группирует их по устройствам.

Хотя здесь нет явной статистики использования пропускной способности определённой шины или магистрали данных, по крайней мере мы можем определить, что делают устройства, и на основе этого косвенно определить нагрузку шины.

3.3.2. Мониторинг использования процессора в Red Hat Enterprise Linux

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

Помимо Системного монитора GNOME, есть первоклассное средство мониторинга top, которое обсуждалось в главе 2 Мониторинг ресурсов, дающее более подробное представление об использовании процессора. Ниже показан отчёт top, полученный на двухпроцессорной рабочей станции:

  9:44pm  up 2 days, 2 min,  1 user,  load average: 0.14, 0.12, 0.09
90 processes: 82 sleeping, 1 running, 7 zombie, 0 stopped
CPU0 states:  0.4% user,  1.1% system,  0.0% nice, 97.4% idle
CPU1 states:  0.5% user,  1.3% system,  0.0% nice, 97.1% idle
Mem:  1288720K av, 1056260K used,  232460K free,       0K shrd,  145644K buff
Swap:  522104K av,       0K used,  522104K free                  469764K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
30997 ed        16   0  1100 1100   840 R     1.7  0.0   0:00 top
 1120 root       5 -10  249M 174M 71508 S <   0.9 13.8 254:59 X
 1260 ed        15   0 54408  53M  6864 S     0.7  4.2  12:09 gnome-terminal
  888 root      15   0  2428 2428  1796 S     0.1  0.1   0:06 sendmail
 1264 ed        15   0 16336  15M  9480 S     0.1  1.2   1:58 rhn-applet-gui
    1 root      15   0   476  476   424 S     0.0  0.0   0:05 init
    2 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU0
    3 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU1
    4 root      15   0     0    0     0 SW    0.0  0.0   0:01 keventd
    5 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU0
    6 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU1
    7 root      15   0     0    0     0 SW    0.0  0.0   0:05 kswapd
    8 root      15   0     0    0     0 SW    0.0  0.0   0:00 bdflush
    9 root      15   0     0    0     0 SW    0.0  0.0   0:01 kupdated
   10 root      25   0     0    0     0 SW    0.0  0.0   0:00 mdrecoveryd
          

Первый связанный с процессором показатель находится в самой первой строке: средняя нагрузка. Средняя нагрузка — это число, отражающее среднее количество исполняемых процессов. Средняя нагрузка обычно представляется тремя числами (как в top), показывающими нагрузку за последние 1, 5 и 15 минут, и данный пример иллюстрирует, что система не очень загружена.

Показатели в следующей строке, хотя и не отражают непосредственно использование процессора, косвенно связаны с ним, так как они представляют число исполняемых процессов (здесь он только один — запомните это, в этом примере это имеет особое значение). Число исполняемых процессов хорошо отражает, насколько требовательна к процессору система.

В следующих двух строках показано текущая нагрузка каждого из двух процессоров. Данные использования показывают, были ли циклы процессора потрачены на обработку кода на уровне пользователя или на уровне системы, а ещё один параметр показывает, сколько процессорного времени было выделено процессам с изменёнными приоритетами. В конце показано время простоя процессора.

Переместившись ниже, к разделу, посвящённому процессам, мы увидим, что больше остальных процессор нагружает сам top; другими словами, тем самым единственным исполняемым процессом системы был top, сделавший снимок самого себя.

ПодсказкаПодсказка
 

Важно помнить, что работа самого системного монитора влияет на получаемые показатели использования ресурсов. В некоторой степени это касается всех программных мониторов.

Если мы хотим изучить использование процессора более подробно, мы должны сменить инструменты. Проанализировав результаты vmstat, мы получим несколько другое представление о нашей системе:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 233276 146636 469808   0   0     7     7   14    27  10   3  87
 0  0  0      0 233276 146636 469808   0   0     0     0  523   138   3   0  96
 0  0  0      0 233276 146636 469808   0   0     0     0  557   385   2   1  97
 0  0  0      0 233276 146636 469808   0   0     0     0  544   343   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  517    89   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0    32  518   102   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    91   2   1  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    72   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    88   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  516    81   2   0  97
        

В данном случае мы использовали команду vmstat 1 10, чтобы сделать 10 выборок с задержкой в одну секунду. На первый взгляд, показатели, связанные с процессором, (поля us, sy и id) кажутся похожими на показатели top, и может даже показаться, что они менее подробны. Однако в отличие top, эти данные позволяют немного больше узнать о том, как использовался процессор.

Если мы посмотрим на поля system, мы заметим, что процессор обрабатывает в среднем 500 прерываний в секунду и переключается между процессами от 80 до 400 раз в секунду. Если вы думаете, что это очень активная работа, вы ошибаетесь, так как на уровне пользователя (поле us) процессор работал в среднем всего 2%, а на уровне системы (поле sy) около 1% времени. И это также показывает, что система простаивает.

Изучив предлагаемые Sysstat средства, мы увидим, что iostat и mpstat по сравнению с top и vmstat дают немного больше дополнительной информации. Однако, sar формирует ряд отчётов, которые могут быть очень полезны при анализе загрузки процессора.

Первый отчёт, который можно получить с помощью команды sar -q, показывает длину очереди команд, общее число процессов и среднюю нагрузку за последние одну и пять минут. Вот как он выглядит:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5
12:10:00 AM         3       122      0.07      0.28
12:20:01 AM         5       123      0.00      0.03
…
09:50:00 AM         5       124      0.67      0.65
Average:            4       123      0.26      0.26
        

В этом примере система постоянно занята (в каждый момент времени в исполняемом состоянии находятся несколько процессов), но не слишком перегружена (так как в данном конкретном компьютере не один процессор).

Следующий отчёт sar, связанный с процессором, выводит команда sar -u:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM       all      3.69     20.10      1.06     75.15
12:20:01 AM       all      1.73      0.22      0.80     97.25
…
10:00:00 AM       all     35.17      0.83      1.06     62.93
Average:          all      7.47      4.85      3.87     83.81
        

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

В многопроцессорных компьютерах команда sar -U может выдавать статистику по отдельным процессорам или по всем сразу. Ниже показан пример выполнения команды sar -U ALL:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM         0      3.46     21.47      1.09     73.98
12:10:00 AM         1      3.91     18.73      1.03     76.33
12:20:01 AM         0      1.63      0.25      0.78     97.34
12:20:01 AM         1      1.82      0.20      0.81     97.17
…
10:00:00 AM         0     39.12      0.75      1.04     59.09
10:00:00 AM         1     31.22      0.92      1.09     66.77
Average:            0      7.61      4.91      3.86     83.61
Average:            1      7.33      4.78      3.88     84.02
        

Команда sar -w показывает число переключений контекстов в секунду, что позволяет лучше понять, куда расходуются циклы процессора:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   cswch/s
12:10:00 AM    537.97
12:20:01 AM    339.43
…
10:10:00 AM    319.42
Average:      1158.25
        

Кроме этого можно получить два разных отчёта sar со статистикой прерываний. Первый отчёт (сформированный командой sar -I SUM) выводит один показатель — число прерываний в секунду:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM      INTR    intr/s
12:10:00 AM       sum    539.15
12:20:01 AM       sum    539.49
…
10:40:01 AM       sum    539.10
Average:          sum    541.00
        

Воспользовавшись командой sar -I PROC, можно разделить статистику прерываний по процессорам (на многопроцессорном компьютере) и по уровням прерываний (от 0 до 15):

Linux 2.4.21-1.1931.2.349.2.2.entsmp (pigdog.example.com)     07/21/2003

12:00:00 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:10:01 AM    0  512.01    0.00    0.00    0.00    3.44    0.00    0.00

12:10:01 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:20:01 AM    0  512.00    0.00    0.00    0.00    3.73    0.00    0.00
…
10:30:01 AM  CPU  i000/s  i001/s  i002/s  i003/s  i008/s  i009/s  i010/s
10:40:02 AM    0  512.00    1.67    0.00    0.00    0.00   15.08    0.00
Average:       0  512.00    0.42    0.00     N/A    0.00    6.03     N/A
        

В этом отчёте (сокращённом по горизонтали, чтобы он поместился на страницу) для разных уровней прерываний отведены отдельные столбцы (например, поле i002/s показывает частоту прерываний уровня 2). Если бы это был многопроцессорный компьютер, на одну выборку для каждого процессора отводилась бы отдельная строка.

Также по поводу этого отчёта важно отметить, что sar добавляет или убирает поля определённых прерываний, в зависимости от наличия данных в этих полях. Это иллюстрирует представленный выше отчёт, в конце которого упоминаются уровни прерываний (3 и 10), отсутствующие в начале периода выборки.

ЗамечаниеЗамечание
 

Есть ещё два отчёта sar, связанных с прерываниями — sar -I ALL и sar -I XALL. Однако с настройками по умолчанию средство сбора данных sadc не собирает сведения, необходимые для этих отчётов. Это можно исправить, отредактировав файл /etc/cron.d/sysstat и заменив строку:

*/10 * * * * root /usr/lib/sa/sa1 1 1
          

на следующую:

*/10 * * * * root /usr/lib/sa/sa1 -I 1 1
          

Учтите, что в результате этого sadc будет собирать дополнительные сведения и это приведёт к росту файлов данных. И поэтому вы должны проверить, хватит ли места в вашей системе с учётом этого роста.