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

Red Hat Enterprise Linux поставляется с большим набором инструментом для мониторинга ресурсов. Хотя ниже перечислены далеко не все инструменты, перечисленные здесь явяются хорошими представителями своего класса с точки зрения функциональности:

Давайте рассмотрим их подробнее.

2.5.1. free

Команда free выводит информацию об использовании памяти. Ниже показан пример её работы:

             total       used       free     shared    buffers     cached
Mem:        255508     240268      15240          0       7592      86188
-/+ buffers/cache:     146488     109020
Swap:       530136      26268     503868

В строке Mem: показано использование физической памяти, в строке Swap: — использование пространства подкачки, а в строке -/+ buffers/cache: — объём физической памяти, выделенный в настоящее время для буферов системы.

Так как free по умолчанию выводит сведения об использовании памяти всего один раз, она годится только для очень непродолжительного наблюдения или быстрого определения, нет ли в данный момент проблем, связанных с памятью. Хотя free может выводить показатели использования памяти неоднократно (с параметром -s), выводимая информация прокручивается, что мешает увидеть, как меняются эти показатели.

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

Поэтому вместо free -s лучше запустить free с помощью команды watch. Например, чтобы показатели использования памяти выводились каждые две секунды (интервал по умолчанию в watch), выполните команду:

watch free

Команда watch каждые две секунды выполняет команду free, очищает экран и выводит новую информацию в то же место на экране. Благодаря этому, следить за тем, как меняются показатели использования памяти, гораздо проще, так как watch создаёт одну обновляемую область просмотра без прокрутки. Вы можете менять задержку между обновлениями с помощью параметра -n, или сделать так, чтобы любые отличия результатов выделялись, указав параметр -d, как показано в следующей команде:

watch -n 1 -d free

За дополнительнымии сведениями обратитесь к странице руководства man watch.

Команда watch будет работать, пока вы не прервёте её, нажав [Ctrl]-[C]. Команду watch стоит запомнить, она может пригодиться в самых разных ситуациях.

2.5.2. top

Тогда как команда free выводит только информацию, связанную с памятью, top сообщает понемногу обо всём. Использование процессора, статистика процессов, использование памяти — top контролирует всё. Кроме этого, в отличие от команды free, top по умолчанию работает непрерывно, так что использовать команду watch нет необходимости. Вот что она выводит:

 14:06:32  up 4 days, 21:20,  4 users,  load average: 0.00, 0.00, 0.00
77 processes: 76 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total   19.6%    0.0%    0.0%   0.0%     0.0%    0.0%  180.2%
           cpu00    0.0%    0.0%    0.0%   0.0%     0.0%    0.0%  100.0%
           cpu01   19.6%    0.0%    0.0%   0.0%     0.0%    0.0%   80.3%
Mem:  1028548k av,  716604k used,  311944k free,       0k shrd,  131056k buff
                    324996k actv,  108692k in_d,   13988k in_c
Swap: 1020116k av,    5276k used, 1014840k free                  382228k cached
                                                                                
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
17578 root      15   0 13456  13M  9020 S    18.5  1.3  26:35   1 rhn-applet-gu
19154 root      20   0  1176 1176   892 R     0.9  0.1   0:00   1 top
    1 root      15   0   168  160   108 S     0.0  0.0   0:09   0 init
    2 root      RT   0     0    0     0 SW    0.0  0.0   0:00   0 migration/0
    3 root      RT   0     0    0     0 SW    0.0  0.0   0:00   1 migration/1
    4 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 keventd
    5 root      34  19     0    0     0 SWN   0.0  0.0   0:00   0 ksoftirqd/0
    6 root      35  19     0    0     0 SWN   0.0  0.0   0:00   1 ksoftirqd/1
    9 root      15   0     0    0     0 SW    0.0  0.0   0:07   1 bdflush
    7 root      15   0     0    0     0 SW    0.0  0.0   1:19   0 kswapd
    8 root      15   0     0    0     0 SW    0.0  0.0   0:14   1 kscand
   10 root      15   0     0    0     0 SW    0.0  0.0   0:03   1 kupdated
   11 root      25   0     0    0     0 SW    0.0  0.0   0:00   0 mdrecoveryd

Информация представлена в двух разделах. В верхнем разделе показаны общие сведения о состоянии системы — время работы, средняя нагрузка, число процессов, состояние процессора и статистика использования памяти и пространства подкачки. В нижнем разделе показана статистика в разрезе процессов. При этом в процессе работы top можно выбрать, какие данные будут отображаться. Например, по умолчанию top выводит статистику и по работающим, и по простаивающим процессам. Чтобы оставить только работающие процессы, нажмите [i]; второе нажатие восстановит обычный режим.

ПредупреждениеПредупреждение
 

Хотя может показаться, что top — простая программа, способная только показывать статистику, это не так. На самом деле top воспринимает односимвольные команды и может выполнять различные действия. Например, если вы являетесь root, вы можете менять приоритет любых процессов в системе и даже уничтожать их. Поэтому, пока вы не изучили справку по командам top (чтобы её вызвать, надо нажать [?]), лучше нажимать только [q] (эта команда завершает работу top).

2.5.2.1. Системный монитор GNOMEtop для графической среды

Если вам удобнее работать в графическом интерфейсе, возможно, вам больше понравится Системный монитор GNOME. Как и top, Системный монитор GNOME показывает общие сведения о состоянии системы, число процессов использование памяти и пространства подкачки, а также статистику по процессам.

Однако Системный монитор GNOME делает ещё один шаг и предлагает графическое представление использования процессора, памяти и пространства подкачки, а также в виде таблицы показывает, как используется дисковое пространство. Пример того, как в Системном мониторе GNOME выглядит вкладка Список процессов (Process Listing) показан на рисунке 2-1.

Рисунок 2-1. Системный монитор GNOME, вкладка Список процессов

Дополнительную информацию об интересующем процессе можно получить, выделив этот процесс и нажав кнопку Больше информации (More Info).

Чтобы просмотреть показатели использования процессора, памяти и диска, перейдите на вкладку Системный монитор (System Monitor).

2.5.3. vmstat

Если вы хотите получить данные производительности в более сжатом виде, попробуйте vmstat. Команда vmstat выводит в одной строке набор чисел, отражающих активность процессов, памяти, механизма подкачки, ввода/вывода, системы и процессора:

procs                      memory      swap          io     system         cpu
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0   5276 315000 130744 380184    1    1     2    24   14    50  1  1 47  0
        

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

С процессами связаны поля:

С памятью связаны поля:

С подкачкой связаны поля:

С подсистемой ввода/вывода связаны поля:

С системой связаны поля:

С процессором связаны поля:

Если команда vmstat запущена без параметров, она выводит только одну строку показателей. Эта строка содержит средние значения за всё время работы системы после загрузки.

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

С помощью vmstat опытный администратор может быстро определить, как используются ресурсы, и выявить проблемы производительности. Но чтобы взглянуть внутрь этих проблем, требуется инструмент другого типа — инструмент, позволяющий собрать и проанализировать данные на более глубоком уровне.

2.5.4. Sysstat — набор инструментов для мониторинга ресурсов

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

Поэтому необходим более совершенный инструмент. И таким инструментом является Sysstat.

Sysstat содержит следующие средства, связанные со сбором статистики ввода/вывода и процессора:

iostat

Выводит краткую статистику использования процессора, а также статистику ввода/вывода для одного или нескольких дисков.

mpstat

Выводит более подробную статистику использования процессора.

Sysstat также включает средства сбора показателей использования ресурсов и построения на их основе ежедневных отчётов. Это следующие инструменты:

sadc

sadc (System Activity Data Collector, сборщик данных активности системы) собирает информацию об использовании ресурсов системы и сохраняет их в файле.

sar

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

В следующих разделах эти инструменты рассматриваются более подробно.

2.5.4.1. Команда iostat

Команда iostat в самом простом виде представляет краткую статистику использования процессора и дисковых операций ввода/вывода:

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

avg-cpu:  %user   %nice    %sys   %idle
           6.11    2.56    2.15   89.18

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev3-0            1.68        15.69        22.42   31175836   44543290
          

Под первой строкой (показывающей версию ядра системы, имя узла и текущую дату), iostat показывает, как в среднем использовался процессор после загрузки системы. Отчёт об использовании процессора включает следующие процентные отношения:

  • Время работы в режиме пользователя (исполняемых приложений и т.п.)

  • Время работы в режиме пользователя (процессов, с приоритетом, изменённым при помощи nice(2))

  • Время работы в режиме ядра

  • Время простоя

Затем приведён отчёт об использовании устройств. Этот отчёт включает отдельную строку для каждого активного дискового устройства компьютера и содержит следующие сведения:

  • Обозначение устройства, выводимое в виде dev<старший номер>-последовательный номер, где <старший номер> — старший номер устройства [1], а <последовательный номер> — порядковый номер, начиная с 0.

  • Число операций передачи данных (или операций ввода/вывода) в секунду.

  • Число блоков (размером 512 байт), прочитанных за секунду.

  • Число блоков (размером 512 байт), записанных за секунду.

  • Общее число прочитанных блоков (размером 512 байт).

  • Общее число записанных блоков (размером 512 байт).

Это всего лишь часть сведений, которые можно получить с помощью iostat. За дополнительной информацией обратитесь к странице руководства man iostat(1).

2.5.4.2. Команда mpstat

На первый взгляд команда mpstat выводит тот же отчёт об использовании процессора, что и iostat:

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

07:09:26 PM  CPU   %user   %nice %system   %idle    intr/s
07:09:26 PM  all    6.40    5.84    3.29   84.47    542.47
          

За исключением дополнительного столбца, показывающего число прерываний, обработанных процессором за секунду, серьёзных отличий нет. Однако, ситуация меняется, если команде mpstat передаётся параметр -P ALL:

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

07:13:03 PM  CPU   %user   %nice %system   %idle    intr/s
07:13:03 PM  all    6.40    5.84    3.29   84.47    542.47
07:13:03 PM    0    6.36    5.80    3.29   84.54    542.47
07:13:03 PM    1    6.43    5.87    3.29   84.40    542.47
          

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

2.5.4.3. Команда sadc

Как было сказано ранее, команда sadc собирает данные использования компьютера и сохраняет их в файле для дальнейшего анализа. По умолчанию данные сохраняются в файлах, в каталоге /var/log/sa/. Файлы имеют названия sa<dd>, где <dd> — текущий день месяца, представленный двумя цифрами.

Команда sadc обычно запускается сценарием sa1. А этот сценарий периодически вызывается демоном cron, благодаря файлу sysstat, расположенному в каталоге /etc/cron.d/. Сценарий sa1 вызывает sadc для выполнения одного измерения в течение одной секунды. По умолчанию cron запускает sa1 раз в 10 минут, и накапливает собранные в этом интервале данные в текущем файле /var/log/sa/sa<dd>.

2.5.4.4. Команда sar

Команда sar обрабатывает данные, собранные командой sadc, и на их основе формирует отчёты об использовании компьютера. В Red Hat Enterprise Linux команда sar по умолчанию автоматически запускает обработку файлов, созданных командой sadc. Файлы отчётов записываются в каталог /var/log/sa/ и называются sar<dd>, где <dd> день месяца предыдущего дня, представленный двумя цифрами.

Команда sar обычно запускается сценарием sa2. А этот сценарий периодически вызывается демоном cron, благодаря файлу sysstat, расположенному в каталоге /etc/cron.d/. По умолчанию cron запускает sa2 раз в день, в 23:53, благодаря чему отчёт формируется по данным всего прошедшего дня.

2.5.4.4.1. Формат отчётов sar

Отчёт sar, сформированный в настроенной по умолчанию системе Red Hat Enterprise Linux, состоит из нескольких разделов, при этом каждый раздел содержит данные определённого типа, отсортированные по времени сбора данных. Так как sadc выполняет измерения длительностью в одну секунду каждые десять минут, время сбора данных в отчёты sar по умолчанию последовательно увеличивается по 10 минут, с 00:00 до 23:50 [2].

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

Ниже приведён пример раздела sar, в котором данные с 00:30 по 23:40 убраны для экономии места:

00:00:01          CPU     %user     %nice   %system     %idle
00:10:00          all      6.39      1.96      0.66     90.98
00:20:01          all      1.61      3.16      1.09     94.14
…
23:50:01          all     44.07      0.02      0.77     55.14
Average:          all      5.80      4.99      2.87     86.34
            

В этом разделе выводятся сведения об использовании процессора. Это очень похоже на то, что выводит iostat.

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

00:00:01          CPU     %user     %nice   %system     %idle
00:10:00            0      4.19      1.75      0.70     93.37
00:10:00            1      8.59      2.18      0.63     88.60
00:20:01            0      1.87      3.21      1.14     93.78
00:20:01            1      1.35      3.12      1.04     94.49
…
23:50:01            0     42.84      0.03      0.80     56.33
23:50:01            1     45.29      0.01      0.74     53.95
Average:            0      6.00      5.01      2.74     86.25
Average:            1      5.61      4.97      2.99     86.43
            

Всего в отчётах, формируемых sar в стандартной конфигурации Red Hat Enterprise Linux, представлено 17 различных разделов, некоторые из них будут рассмотрены в следующих главах. За дополнительными сведениями о содержащихся в каждом разделе данных, обратитесь к странице man sar(1).

2.5.5. OProfile

OProfile — средство профилирования на уровне системы, оказывающее минимальное влияние на её работу. OProfile позволяет выявить природу проблем производительности, используя встроенные в процессор аппаратные возможности мониторинга производительности [3].

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

Счётчики могут иметь некоторое начальное значение и вызывать прерывание при переполнении. Задавая разные начальные значения счётчика, можно определить частоту, с какой будут происходить прерывания. Так можно управлять частотой выборки, а значит уровнем детализации собираемых данных.

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

ПредупреждениеПредупреждение
 

OProfile вполне можно настроить так, что создаваемая им нагрузка сделает систему неработоспособной. Таким образом, выбирая значения счётчиков, вы должны быть внимательны. Поэтому команда opcontrol принимает параметр --list-events, который выводит типы событий, поддерживаемые текущим процессором, а также минимальные рекомендуемые значения счётчиков для каждого.

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

2.5.5.1. Компоненты OProfile

Oprofile состоит из следующих компонентов:

  • Программные средства сбора данных

  • Программные средства анализа данных

  • Административный интерфейс

Программные средства сбора данных состоят из модуля ядра oprofile.o и демона oprofiled.

Средства анализа данных включают следующие программы:

op_time

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

oprofpp

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

op_to_source

Выводит прокомментированный исходный код и/или листинг на ассемблере

op_visualise

Выводит собранные данные в графическом виде

Эти программы позволяют просмотреть собранные данные самыми разными способами.

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

2.5.5.2. Пример сеанса OProfile

Этот раздел демонстрирует сеанс наблюдения и анализа данных в OProfile, от начальной настройки до окончательного анализа данных. Это всего лишь вводный обзор, чтобы узнать об этом подробнее, обратитесь к Руководству по администрированию Red Hat Enterprise Linux.

Чтобы определить, какие типы данных должны собираться, воспользуйтесь opcontrol следующим образом:

opcontrol \
    --vmlinux=/boot/vmlinux-`uname -r` \
    --ctr0-event=CPU_CLK_UNHALTED \
    --ctr0-count=6000

Использованные здесь параметры указывают opcontrol:

  • Направить OProfile к копии текущего работающего ядра (--vmlinux=/boot/vmlinux-`uname -r`)

  • Использовать 0-ой счётчик процессора для отслеживания времени, в течение которого процессор выполнял инструкции (--ctr0-event=CPU_CLK_UNHALTED)

  • Указать OProfile делать выборки через каждые 6000 повторений заданного события (--ctr0-count=6000)

Затем проверьте, загружен ли модуль ядра oprofile, выполнив команду lsmod:

Module                  Size  Used by    Not tainted
oprofile               75616   1
…

Убедитесь в том, что файловая система OProfile (расположенная в /dev/oprofile/) смонтирована, выполнив команду ls /dev/oprofile/:

0  buffer       buffer_watershed  cpu_type  enable       stats
1  buffer_size  cpu_buffer_size   dump      kernel_only

(Точное количество файлов зависит от типа процессора.)

В данный момент файл /root/.oprofile/daemonrc содержит параметры, необходимые средствам сбора данных:

CTR_EVENT[0]=CPU_CLK_UNHALTED
CTR_COUNT[0]=6000
CTR_KERNEL[0]=1
CTR_USER[0]=1
CTR_UM[0]=0
CTR_EVENT_VAL[0]=121
CTR_EVENT[1]=
CTR_COUNT[1]=
CTR_KERNEL[1]=1
CTR_USER[1]=1
CTR_UM[1]=0
CTR_EVENT_VAL[1]=
one_enabled=1
SEPARATE_LIB_SAMPLES=0
SEPARATE_KERNEL_SAMPLES=0
VMLINUX=/boot/vmlinux-2.4.21-1.1931.2.349.2.2.entsmp

Затем воспользуйтесь opcontrol, чтобы начать сам процесс сбора данных, выполнив команду opcontrol --start:

Using log file /var/lib/oprofile/oprofiled.log
Daemon started.
Profiler running.

Убедитесь в том, что демон oprofiled работает, выполнив команду ps x | grep -i oprofiled:

32019 ?        S      0:00 /usr/bin/oprofiled --separate-lib-samples=0 …
32021 pts/0    S      0:00 grep -i oprofiled

(Вообще командная строка oprofiled, которую показывает ps, намного длиннее, однако здесь она была сокращена с целью сохранения форматирования.)

При этом начинается наблюдение за системой и сбор данных по всем представленным в системе исполняемым модулям. Эти данные сохраняются в каталоге /var/lib/oprofile/samples/. Имена файлов в этом каталоге следуют несколько необычному соглашению. Например:

}usr}bin}less#0

В имени отражается абсолютный путь файла, содержащего исполняемый код, при этом символы косой черты (/) заменяются открывающими фигурными скобками (}), а в конце добавляется знак решётки (#) и число (в данном случае 0). Таким образом, в файле с именем, рассмотренном в этом примере, представлены данные, собранные во время работы /usr/bin/less.

Собрав данные, вы можете просмотреть их, воспользовавшись одним из средств анализа. У OProfile есть замечательная особенность — для выполнения анализа данных не обязательно прекращать сбор данных. Однако вы должны подождать, пока на диск не запишется хотя бы один набор выборок, или выполнить команду opcontrol --dump, чтобы принудительно записать выборки на диск.

В следующем примере для отображения собранных данных используется op_time (при этом данные отсортированы по убыванию количества выборок):

3321080   48.8021  0.0000 /boot/vmlinux-2.4.21-1.1931.2.349.2.2.entsmp
761776    11.1940  0.0000 /usr/bin/oprofiled
368933     5.4213  0.0000 /lib/tls/libc-2.3.2.so
293570     4.3139  0.0000 /usr/lib/libgobject-2.0.so.0.200.2
205231     3.0158  0.0000 /usr/lib/libgdk-x11-2.0.so.0.200.2
167575     2.4625  0.0000 /usr/lib/libglib-2.0.so.0.200.2
123095     1.8088  0.0000 /lib/libcrypto.so.0.9.7a
105677     1.5529  0.0000 /usr/X11R6/bin/XFree86
…

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

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

<sample-count> <sample-percent> <unused-field> <executable-name> 

Где:

  • <sample-count> представляет число полученных выборок

  • <sample-percent> представляет процентное отношение выборок этого исполняемого модуля к числу всех выборок

  • <unused-field> — неиспользуемое поле

  • <executable-name> представляет имя файла исполняемого кода, для которого были получены выборки.

Этот отчёт (полученный в практически незагруженной системе) показывает, что в половине всех выборок процессор выполнял код самого ядра. Следующим был демон сбора данных OProfile, а за ним следовали различные библиотеки и сервер системы X Window, XFree86. Следует заметить, что для системы, использованной в этом пробном сеансе, значение 6000 — это минимальное значение счётчика, рекомендуемое командой opcontrol --list-events. Это значит, что на накладные расходы OProfile расходуется максимум 11% процессорного времени (по крайней мере, именно в этой системе).

Замечания

[1]

Старшие номера устройств можно определить, использую команду ls -l для вывода имени интересующего вас файла устройства в /dev/. Старший номер устройства указывается после имени группы владельца устройства.

[2]

Изменения нагрузки системы могут привести к отклонениям времени сбора данных на секунду или две.

[3]

В тех архитектурах компьютеров, в которых отсутствует оборудование мониторинга производительности, OProfile также может включить запасной механизм (так называемый TIMER_INT).