Мониторинг пропускной способности и загрузки процессора в 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 будет собирать дополнительные сведения и это приведёт к росту файлов данных. И поэтому вы должны проверить, хватит ли места в вашей системе с учётом этого роста. |