 | Измерение степени загрузки ресурсов
В этом разделе описывается материал по теме 306.1 экзамена на профессионала Linux высокого уровня (LPIC-3) 301. Эта тема обладает весом 4.
Из этого раздела вы узнаете, как:
- Измерить степень загрузки центрального процессора
- Измерить степень загрузки памяти
- Измерить степень загрузки средств дискового ввода/вывода
- Измерить степень загрузки средств сетевого ввода/вывода
- Измерить пропускную способность функций межсетевой защиты и маршрутизации
- Получить карту использования пропускной способности клиентами
Работа компьютера основана на использовании следующих аппаратных ресурсов: центральный процессор (CPU, ЦП), оперативная память, дисковая и сетевая подсистемы. Вы измеряете эти ресурсы, чтобы получить представление о текущем состоянии системы, а также о проблемах, которые могут возникнуть в будущем. Посмотрев на результаты измерений за определенный промежуток времени, например, за несколько месяцев, можно получить более полную картину. Часто полученные результаты можно экстраполировать на будущие периоды, что поможет вам определить время, через которое какой-либо из ресурсов исчерпает себя. Помимо этого, используя накопленную информацию, вы можете разработать математическую модель вашей системы, с помощью которой сможете более точно предсказывать работу системы в будущем.
Для выполнения задач серверы всегда используют несколько аппаратных компонентов. Для успешного выполнения задачи может потребоваться доступ к диску для получения данных, а также некоторый объем свободной памяти для хранения этих данных во время их обработки центральным процессором. Если системе не будет хватать какого-нибудь ресурса, производительности системы пострадает. Центральный процессор не может обрабатывать информацию, пока она не будет считана с диска, а информация, в свою очередь, не может быть помещена в память, если вся память заполнена. Таким образом, между всеми компонентами существует тесная взаимосвязь. При заполнении памяти операционная система начинает выгружать ее фрагменты на диск. Кроме того, дополнительная память забирается из буферов, которые используются для ускорения дисковых операций.
Что представляют собой ресурсы
Прежде чем вы сможете извлечь пользу из измерения ресурсов, вы должны понять, что вы измеряете. После этого вы сможете получать полезную информацию, такую как текущее состояние и история работы системы, а также предсказывать ее работу в будущем.
Центральный процессор
Центральный процессор компьютера выполняет все необходимые приложениям вычисления, вызывает на исполнение команды дисковой подсистемы и другого периферийного оборудования, а также следит за работой ядра операционной системы. В каждый момент времени центральный процессор выполняет только одну задачу независимо от того, является ли эта задача ядром или простым приложением. Текущая задача может быть прервана аппаратным сигналом, называемым прерыванием (interrupt). Прерывания возникают в результате внешних событий, таких как получение сетевого пакета, или внутренних событий, таких как импульс системного тактового генератора (в Linux это называется tick). Когда возникает прерывание, обработка текущей задачи приостанавливается и запускается процедура определения следующего действия, которое должна выполнить система.
Когда время, отведенное на выполнение текущего процесса, истекает, ядро может переключиться на выполнение другого процесса, используя процедуру, называемую переключением контекста (context switch). Переключение на выполнение другого процесса может произойти досрочно, если процесс вызывает какую-либо команду ввода/вывода, такую как чтение с диска. Скорость работы компьютера намного больше скорости работы диска, поэтому в то время, когда центральный процессор ожидает завершения дисковой операции приостановленного процесса, он может выполнять другие задачи.
Когда мы говорим о ЦП в системе Linux, необходимо учитывать несколько факторов. Во-первых, процент времени, в течение которого процессор находиться в режиме простоя, в сравнении со временем, в которое процессор выполняет полезную работу (на самом деле центральный процессор всегда что-то делает – считается, что процессор простаивает, если ни одна задача не ожидает выполнения). Производительность работы процессора максимальна, когда процент его простоя равен нулю. Та часть работы ЦП, которая отлична от простоя, делится на системное время и время пользователя; системное время означает время, потраченное на работу ядра, а время пользователя – время, потраченное на обработку запросов пользователя. Время простоя делится на время простоя ядра по причине отсутствия каких-либо задач и на время простоя ядра по причине ожидания каких-либо сигналов от операций ввода/вывода.
Измерение показаний этих счетчиков является непростой задачей, поскольку для получения точных значений потребовалось бы, чтобы процессор тратил все свое время на определение того, что он делает! Ядро выполняет проверку текущего статуса (system, user, iowait, idle) около 100 раз в секунду и использует полученные значения для вычисления процентных соотношений.
Другой величиной для определения загрузки центрального процессора в Linux является средняя загрузка (load average). Эта величина не привязана непосредственно к загрузке ЦП, а представляет собой экспоненциальное взвешивание количества задач, находящихся в очереди на исполнение, за последнюю минуту, 5 и 15 минут. Более подробно эта величина будет рассмотрена позже.
Другими характеристиками работы ядра являются интенсивность генерации прерываний (interrupt load) и переключения контекста (context switches); в их отношении не существует верхних границ, но чем больше выполняется прерываний и переключений контекста, тем меньше времени остается у центрального процессора на выполнения задач пользователя.
Память
В системе существует два вида памяти: реальная память и область подкачки. Реальная память - это емкость модулей ОЗУ, установленных на материнской плате. Область подкачки – это пространство для временного хранения данных, используемое в тех случаях, когда система пытается выделить больше ОЗУ, чем физически установлено в системе. В этой ситуации страницы ОЗУ выгружаются на диск с целью освободить место для размещения текущих данных. Когда выгруженные на диск данные требуются снова, они загружаются обратно в ОЗУ.
ОЗУ может использоваться приложениями или системой, либо не использоваться вообще. Система использует ОЗУ двумя способами: в качестве буфера для линейных дисковых блоков (входящих или исходящих) и в качестве файлового кэша. Размеры буферов и кэша являются динамическими, поэтому при необходимости эта память может быть предоставлена приложениям. Вот почему в большинстве ситуаций создается впечатление, что в Linux-системах нет свободной памяти – система выделяет всю неиспользованную память под буферы и кэш.
Область свопинга располагается на диске. Большое количество операций свопинга замедляет работу системы и служит признаком нехватки ОЗУ.
Диск
Диском называют устройство длительного хранения данных. Это может быть жесткий диск, флэш-диск или лента (все эти устройства называются блочными устройствами). Исключением является RAM-диск, который ведет себя как блочное устройство, но располагается в ОЗУ (RAM); при выключении системы все данные на этом диске теряются. Наиболее распространенным типом диска является жесткий диск, поэтому обсуждение в этом руководстве будет сфокусировано именно на этом носителе информации.
Для описания диска используются две категории параметров: объем и скорость. Свободное пространство диска – это число байтов на диске, доступных для использования. Занятое пространство – это любая область, используемая файловой системой или же недоступная для использования по другим причинам. Помните, что многие производители указывают объем диска в гигабайтах, состоящих из 1 000 000 000 байтов, тогда как операционная система понимает один гигабайт как степень двойки – 1 073 741 824; таким образом, для покупателя реальный объем составляет 93% от заявленного. Эти "потери" не учитываются в качестве занятого пространства, но если вы не обратите на это внимание, ваши расчеты окажутся неверными.
Второй величиной, характеризующей диск, является скорость, которая показывает, насколько быстро происходит получение данных с диска. Чтобы центральный процессор смог получить данные с диска в результате своего запроса, выполняются следующие действия:
- Запрос помещается в очередь ядром и ожидает своего перенаправления на диск (время ожидания).
- Команда направляется контроллеру диска.
- Диск перемещает головки к требуемому блоку (время позиционирования).
- Головки диска считывают данные.
- Данные возвращаются центральному процессору.
Каждый из этих шагов измеряется по-разному, а иногда не измеряется вовсе. Время обслуживания включает в себя последние три шага и показывает, как долго выполняется запрос после его получения. Время ожидания включает в себя всю процедуру – как время нахождения запроса в очереди, так и время обслуживания.
Частью действий по оптимизации, которую выполняет ядро, является переупорядочивание и объединение на шаге 1 запросов, находящихся в очереди, с целью минимизации количества обращений к диску. Эта функция называется элеватором, и на протяжении прошедших лет для нее использовались различные алгоритмы.
Сеть
Linux-система выполняет две основные сетевые роли: роль клиента, когда приложения на сервере получают и отправляют пакеты, и роль маршрутизатора (или брандмауэра, или моста). Во втором случае пакеты приходят на один сетевой интерфейс и отправляются с другого (возможно, после выполнения некоторой фильтрации или дополнительной проверки).
Производительность сети чаще всего характеризуется такими величинами, как количество битов (килобитов, мегабитов или гигабитов) в секунду и количество пакетов в секунду. Измерение количества пакетов в секунду часто оказывается не очень полезным, поскольку имеются фиксированные издержки для каждого пакета, выражающиеся в более низкой пропускной способности для пакетов более мелкого размера. Не путайте скорость сетевого интерфейса (100 Мбит/с или 1 Гбит/с) с предполагаемой скоростью прохождения или передачи данных от компьютера. Здесь играют роль несколько внешних факторов, включая задержки и производительность удаленной стороны подключения, не говоря уже о настройках сервера.
Очереди
Очереди не очень вписываются в одну категорию с другими ресурсами, но они так часто фигурируют в мониторинге производительности, что о них следует упомянуть. Очередь – это последовательность, в которой запросы ожидают своего выполнения. Очереди используются ядром множеством способов, начиная от очереди на выполнение, содержащей список процессов, которые необходимо выполнить, и заканчивая дисковыми очередями, сетевыми очередями и аппаратными очередями. Обычно очередью называют участок памяти, который ядро использует для отслеживания конкретного набора задач, но это также может быть область памяти аппаратного компонента, управляемая этим компонентом.
Очереди влияют на производительность следующим образом. Во-первых, когда в очередь поставлено слишком много заданий, любое новое задание теряется. Например, если на сетевой интерфейс приходит слишком много пакетов, некоторые из них отбрасываются (в сетевых терминах это называется tail drop - отбрасывание конца очереди). Во-вторых, если очередь чрезмерно (а иногда недостаточно) используется, то другие компоненты не работают так, как это необходимо. Частое нахождение большого числа процессов в очереди выполнения может означать, что центральный процессор перегружен.
Оценка производительности
Для оценки производительности Linux-систем существует несколько инструментов. Некоторые из них непосредственно измеряют загрузку процессора, дисковой подсистемы, памяти и сети, а другие отображают индикаторы, такие как использование очереди, создание процессов и возникающие ошибки. Одни инструменты отображают моментальные значения, другие – значения, усредненные за некоторый период времени. Одинаково важно понимать как то, каким образом выполнялись измерения, так и то, что было измерено.
vmstat
vmstat – это утилита для оценки наиболее часто используемых величин в реальном времени. Самое главное, что необходимо знать о vmstat, - это то, что первоначальные показания этой утилиты представляют собой значения, усредненные за время работы системы с момента ее загрузки. Обычно их можно смело игнорировать. Чтобы утилита vmstat отображала текущую информацию, укажите в командной строке интервал обновления (в секундах). В листинге 1 показан результат выполнения команды vmstat 5.
Листинг 1. Вывод данных утилиты vmstat 5
# vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 3 17780 10304 18108 586076 0 0 2779 332 1 1 3 4 76 17 0
1 2 17780 10088 19796 556172 0 0 7803 3940 2257 4093 25 28 14 34 0
0 2 17780 9568 19848 577496 0 0 18060 1217 1610 910 0 3 48 49 0
0 0 17780 51696 20804 582396 0 0 9237 3490 1736 839 0 3 55 41 0
|
В листинге 1 показан вывод данных команды vmstat с интервалом обновления в 5 секунд. Первая строка содержит значения, усредненные за время работы системы с момента загрузки, поэтому ее следует проигнорировать. Первые два столбца относятся к процессам. Числа под заголовком r представляют собой количество процессов в очереди выполнения на момент измерения. Процессы в очереди на выполнение ожидают своей обработки центральным процессором. В следующем столбце отображено количество процессов, заблокированных операциями ввода/вывода; это означает, что данные процессы ожидают возвращения некоторой части данных ввода/вывода и не могут быть прерваны.
Столбцы в группе memory содержат результаты моментальных измерений системной памяти, выраженные в килобайтах (1024 байтов). В столбце swpd отображено количество памяти, выгруженной на диск. В столбце free отображено количество памяти, не используемой приложениями, буферами или кэшем. Не удивляйтесь, если это количество невелико (дополнительную информацию о том, что на самом деле представляет собой свободная память, см. в обсуждении команды free). Столбцы buff и cache показывают, какое количество памяти выделено под буферы и кэш. В буферах хранятся линейные дисковые блоки, а в кэше – файлы.
Первые две категории – это результаты моментальных измерений. Возможна ситуация, когда на короткий период времени вся свободная память окажется занятой, но будет вновь освобождена до наступления следующего интервала. Остальные значения являются усредненными за период выборки.
В столбцах группы swap отображено усредненное количество памяти (в килобайтах), загруженной (si) и выгруженной (so) на диск в секунду. В столбцах группы io отображено количество дисковых блоков в секунду, считанных со всех блочных устройств и отосланных им.
В столбцах группы system отображено количество прерываний (in) и переключений контекста (cs) в секунду. Прерывания генерируются устройствами (например, сетевой адаптер сообщает ядру о том, что имеется ожидающий своей очереди пакет) и системным таймером. В некоторых ядрах системный таймер генерирует 1 000 тактов в секунду, поэтому количество прерываний может быть достаточно велико.
Последняя группа величин показывает, что происходит с центральным процессором; значения выражены в процентах от его общего времени работы. Сумма этих пяти значений должна быть равна 100. В столбце us отображено среднее время, затраченное центральным процессором на обработку задач пользователей за период выборки, а в столбце sy – среднее время, затраченное на обработку системных задач. Столбец id показывает время простоя ЦП, а столбец wa – время ожидания процессором данных ввода/вывода (листинг 1 был получен на машине с большим количеством операций ввода/вывода, и вы можете видеть, что 34-49% времени работы процессора ушло на ожидание получения данных с диска). Последний столбец, st (steal time - украденное время), предназначен для серверов, на которых запущены гипервизор и виртуальные машины. Данное значение представляет собой время, в течение которого гипервизор мог бы работать с виртуальной машиной, но ему приходилось выполнять какие-то другие задачи.
Как видно из листинга 1, утилита
vmstat позволяет получить большое количество информации о самых различных параметрах работы системы. Если во время вашей работы в системе возникнут какие-то неполадки, утилита vmstat является прекрасным способом установить их причины.
С помощью утилиты vmstat можно также получить некоторые полезные сведения об использовании диска каждым устройством, что позволяет более подробно узнать о параметрах категорий подкачки и ввода/вывода, представленных в листинге 1. Параметр -d выводит статистику о дисках, включая суммарное количество операций чтения и записи, выполненных для каждого диска. В листинге 2 показан фрагмент вывода, полученного при выполнении команды vmstat -d 5 (без вывода информации о неиспользуемых устройствах).
Листинг 2. Использование vmstat для получения информации об использовании диска
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
hda 186212 28646 3721794 737428 246503 4549745 38981340 8456728 0 2583
hdd 181471 27062 3582080 789856 246450 4549829 38981624 8855516 0 2652
|
Каждый диск представлен отдельной строкой, а данные об операциях записи и чтении сгруппированы в соответствующих разделах, каждый из которых, в свою очередь, разделен на четыре группы: общее количество запросов, количество запросов, объединенных в дисковом элеваторе, количество считанных или записанных секторов и общее время обслуживания. Все эти значения являются счетчиками и в отличие от средних значений, полученных без использования параметра -d, увеличиваются вплоть до следующей перезагрузки системы.
Последняя группа величин в листинге 2, IO, отображает текущее количество операций ввода/вывода, выполняющихся в текущий момент, и общее количество секунд, затраченное на выполнение операций ввода/вывода с момента загрузки системы.
Из листинга 2 видно, что объем считанных данных практически одинаков для двух дисков, так же как и объем записанных данных. Эти два диска объединены в программный массив RAID1, поэтому такое поведение вполне ожидаемо. Информацию из листинга 2 можно использовать для выявления более медленных дисков или дисков с более высокой загрузкой по сравнению с остальными.
iostat
Команда iostat очень похожа на пример утилиты vmstat -d, приведенный в листинге 2. Данная команда выводит подробную информацию об использовании каждого диска. Утилита iostat позволяет получить больше информации, чем vmstat -d. Так же, как и в случае с vmstat, вы можете передать команде iostat параметр, задающий интервал обновления. И опять же, как и в случае с vmstat, первая строка вывода содержит значения за все время работы системы с момента ее загрузки и поэтому обычно игнорируется. В листинге 3 показан вывод данных команды iostat с 5-секундным интервалом обновления.
Листинг 3. Вывод данных команды iostat
$ iostat 5
Linux 26.20-1.3002.fc6xen (bob.ertw.com) 02/08/2008
avg-cpu: %user %nice %system %iowait %steal %idle
0.85 0.13 0.35 0.75 0.01 97.90
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 1.86 15.24 13351 4740568 41539964
hdd 1.85 14.69 133.51 4570088 41540256
|
Для каждого интервала обновления в первой части вывода данных указана загрузка центрального процессора, которую также показывает команда vmstat. Однако здесь выводятся два разряда после запятой. Вторая часть вывода данных содержит все блочные устройства, присутствующие в системе (чтобы ограничить набор выводимых устройств, укажите имена требуемых устройств в командной строке утилиты, например, iostat 5 hda sda). В первом столбце, tps, отображается количество передач в секунду, поступивших устройству после того, как запросы были объединены элеватором. Размеры передач не указываются. Последние четыре столбца содержат значения, выраженные в блоках по 512 байтов, и показывают количество считанных и записанных блоков в секунду, а также общее количество считанных и записанных блоков соответственно. Если вы хотите видеть эти значения в килобайтах или мегабайтах, используйте параметр командной строки -k или -m соответственно. При необходимости вы можете использовать параметр -p, который отображает информацию на уровне дисковых разделов.
Вы можете получить намного больше информации, используя параметр -x, что показано в листинге 4. Вывод данных в листинге 4 ограничен одним диском. Мы изменили форматирование результатов, чтобы они поместились на ширине страницы.
Листинг 4. Расширенная информация, полученная в результате выполнения iostat
# iostat -x 5 hda
..... CPU information removed ...
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz
hda 16669.31 1.49 756.93 1.49 139287.13 27.72 18369
avgqu-sz await svctm %util
1.58 208 1.28 96.83
|
Первые шесть значений касаются операций чтения и записи в секунду. Столбцы rrqm/s и wrqm/s содержат количество запросов на чтение и запись, которые были объединены. Столбцы r/s и w/s, наоборот, содержат количество операций записи и чтения, переданных на диск. Таким образом, процент объединенных дисковых запросов составляет 16669 / (16669 + 757) = 95% от общего количества. Столбцы rsec/s и wsec/s показывают скорости чтения и записи, выраженные в секторах в секунду.
В следующих четырех столбцах содержится информация о дисковых очередях и временных характеристиках. Столбец avgrq-sz содержит средний размер запросов (выражается в секторах) к устройству. Столбец avgqu-sz содержит среднюю длину дисковой очереди за период выборки. Столбец await содержит среднее время ожидания (в миллисекундах), то есть среднее время, прошедшее от момента отправки запроса ядру до его обратного возвращения. Столбец svctm содержит среднее время обслуживания (в миллисекундах), то есть, время, прошедшее с момента, когда дисковый запрос покинул очереди и был отправлен на диск, до его возвращения.
Последний столбец, %util, содержит процент времени, затраченного системой на выполнение операций ввода/вывода для данного устройства, также называемый насыщением. Значение 96.83% в листинге 4 означает, что за этот промежуток времени диск работал почти на полную мощность.
mpstat
Утилита mpstat сообщает детальную информацию о центральном процессоре (или обо всех процессорах в многопроцессорных системах). Большую часть этой информации в той или иной форме можно получить из утилит iostat и vmstat, однако mpstat предоставляет данные для каждого отдельного процессора. В листинге 5 показан результат выполнения команды mpstat с 5-секундным интервалом обновления. В отличие от случаев утилитам iostat и vmstat, здесь вы игнорировать первую строку не следует.
Листинг 5. Информация о центральном процессоре, полученная в результате выполнения mpstat
# mpstat -P 0 5
Linux 2.620-1.3002.fc6xen (bob.ertw.com) 02/09/2008
09:45:23 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
09:45:25 PM 0 77.61 21.89 0.00 0.00 0.50 0.00 0.00 0.00 155.22
09:45:27 PM 0 68.16 30.85 1.00 0.00 0.00 0.00 0.00 0.00 154.73
|
Параметр командной строки -P 0 указывает, что необходимо вывести информацию для первого ЦП (нумерация начинается с 0). Также вы можете указать параметр -P ALL, чтобы вывести информацию обо всех процессорах по отдельности. Утилита mpstat возвращает следующие значения:
-
%user: процент времени, затраченного на обработку задач пользователей, за исключением nice-задач
-
%nice: процент времени, затраченного на обработку задач пользователей в режиме nice (с пониженным приоритетом)
-
%sys: процент времени, затраченного на обработку задач ядра
-
%iowait: процент времени, затраченного на ожидание операций ввода/вывода во время простоя
-
%irq: процент времени, затраченного на обработку аппаратных прерываний
-
%soft: процент времени, затраченного на обработку программных прерываний
-
%steal: процент времени, "украденного" гипервизором у виртуальный машины
-
intr/s: среднее количество прерываний в секунду
pstree
Информация о том, какие из процессов являются родительскими для других процессов, полезна в тех случаях, когда вы отслеживаете использование системных ресурсов. Одним из способов обнаружить такую взаимосвязь является использование команды ps -ef и полученного родительского идентификатора процесса для отслеживания всей цепочки вплоть до PID 1 (init). Также вы можете использовать параметр ps -efjH, который сортирует результаты в виде дерева родитель-потомок и содержит данные о времени использования центрального процессора.
Утилита pstree выводит на экран дерево процессов в более наглядном графическом формате, а также группирует несколько экземпляров одного и того же процесса в одну строку. В листинге 6 показаны результаты выполнения утилиты pstree, которой был передан идентификатор PID демона Postfix.
Листинг 6. Вывод данных утилиты pstree
[root@sergeant ~]# pstree 7988
master─┬─anvil
├─cleanup
├─local
├─pickup
├─proxymap
├─qmgr
├─2*[smtpd]
└─2*[trivial-rewrite]
|
Главный процесс, разумно называющийся master, породил несколько других процессов, среди которых процессы anvil, cleanup и local. Последние две строки вывода данных отображены в формате
N*[процесс], где процесс – это имя процесса, а N – количество дочерних процессов с этим именем. Если в дополнение к квадратным скобкам ([]) процесс заключен в фигурные скобки ({}), это может означать, что выполняются N потоков (обычно команда ps не показывает потоки, если только вы не используете параметр -L).
w, uptime и top
Эти утилиты собраны в одну группу, поскольку именно к ним обычно обращаются в первую очередь при диагностировании проблем. В листинге 7 приведен вывод данных команды w.
Листинг 7. Вывод данных команды w
# w
12:14:15 up 33 days, 15:09, 2 users, load average: 0.06, 0.12, 0.09
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty2 - 17Jan08 18days 0.29s 0.04s login -- root
root pts/0 bob Sat22 0.00s 0.57s 0.56s -bash
|
Первая строка вывода данных команды w содержит основную информацию. Первая часть, "12:14:15 up 33 days, 15:09", сообщает текущее время, после которого указано время непрерывной работы системы – 33 дня, 15 часов и 9 минут. Вторая часть, "2 users", сообщает количество работающих в системе пользователей. Заключительная часть – это средняя загрузка системы за периоды 1, 5 и 15 минут.
Средняя загрузка является средневзвешенным значением количества процессов в очереди на выполнение за указанный период времени. Чем выше средняя загрузка, тем больше процессов пытаются обратиться к центральным процессорам. Средние загрузки не нормализованы относительно количества процессоров; это означает, что средняя загрузка и количество процессоров не взаимосвязаны.
Для использования средней загрузки вы также должны знать о взвешивании. Средняя загрузка обновляется каждые 5 секунд, при этом используется более старая информация, играющая менее значимую роль в вычислениях. Если в вашей системе произошел непосредственный переход от 0 процессов, находящихся в очереди на выполнении, к 1 процессу, график средней минутной загрузки за последующую минуту не будет представлять собой прямую линию, а будет являться кривой, сначала резко возрастающей, а затем спадающей до следующей 60-секундной отметки. Для получения более подробной информации о том, как рассчитывается средняя загрузка, обратитесь к разделу Ресурсы.
Практический результат взвешивания средней загрузки заключается в том, что изменения фактической загрузки во время измерения сглаживаются, но текущее состояние отражается более точно, в особенности в ежеминутных средних значениях.
За первой строкой следует список работающих в системе пользователей, включающий время входа в систему, их местоположение, а также информацию об использовании центрального процессора. Первый пользователь, root, вошел в систему с терминала tty2 (локальная консоль) и простаивает уже 18 дней. Второй пользователь тоже root, но подключился по сети и в данное время находится в командной оболочке. Столбцы JCPU и PCPU позволяют понять, сколько процессорного времени потратил пользователь; первый столбец содержит прошлые задания, тогда как столбец PCPU показывает процесс, который использует пользователь в текущий момент.
Вывод данных утилиты uptime содержит ту же информацию, что и первая строка вывода данных утилиты w, но без информации о пользователях. С практической точки зрения более полезной является утилита w,поскольку она показывает дополнительную информацию о пользователях, и ее проще набрать в командной строке!
Другой популярной командой является команда top, показывающая в дополнение к некоторым другим величинам непрерывно обновляющийся список самых значимых процессов (отсортированных по степени использования памяти или ресурсов центрального процессора). На рисунке 1 показан снимок экрана, на котором команда top запечатлена в действии.
Рисунок 1. Команда top в действии
Первая строка показывает ту же информацию, что и утилита uptime – время непрерывной работы и среднюю загрузку системы. Вторая строка содержит ряд процессов. Выполняющиеся (running) процессы находятся в очереди на выполнение, спящие (sleeping) процессы ожидают, пока кто-нибудь выведет их из этого состояния, обратившись к ним. Остановленный (stopped) процесс был временно приостановлен, вероятно, потому, что выполняется его трассировка или отладка. Зомби-процесс (zombie) завершил работу, но родительский процесс не рпспознал этого.
 |
Числа не сходятся
Величина VIRT = RES + SWAP, значит, величина SWAP = VIRT - RES. Посмотрев на процесс с идентификатором PID 13435, вы можете увидеть, что величина VIRT имеет значение 164m, а RES - а 76m, значит величина SWAP должна иметь значение 88m. Тем не менее, статистика в верхней части экрана показывает, что используется только 144 КБ swap-пространства! Это можно проверить, включив с помощью клавиши f дополнительные поля (например, swap), находясь в окне top.
Как оказывается, swap-пространство относится не только к выгруженным на диск страницам памяти. Двоичный код и библиотеки приложения не обязательно должны оставаться в памяти все время. Ядро может пометить определенные страницы памяти как неиспользуемые в текущий момент, но поскольку двоичный код располагается по известному адресу на диске, нет необходимости использовать для него swap-файл. Тем не менее это дисковое пространство рассматривается как swap-область, поскольку эта часть кода не является резидентной. Кроме того, память может быть выгружена в дисковый файл приложением. Поскольку размер всего приложения (VIRT) включает в себя распределенную память, но она не является резидентной (RES), она считается swap-областью.
|
|
Третья строка содержит статистику использования центрального процессора: в порядке очередности вы видите время, затраченное на обработку задач пользователей, системных задач и задач в nice-режиме, время простоя ЦП, время ожидания операций ввода/вывода, время обработки аппаратных и программных прерываний, и, наконец, украденное время (steal time). Эти значения являются процентными соотношениями времени за последний интервал обновления (по умолчанию 3 секунды).
Последние две строки верхнего раздела содержат статистику использования памяти. Первая строка показывает информацию о реальной памяти; из рисунка 1 вы можете видеть, что в системе имеется 961 780 КБ ОЗУ (не считая памяти, выделенной ядру). Используется вся память, за исключением 6 728 КБ, при этом около 30 МБ выделено под буферы и 456 МБ – под кэш (размер кэша отображается в конце второй строки). Вторая строка показывает информацию об использовании swap-области: в системе имеется почти 3 ГБ swap-пространства, и лишь 144 КБ из этого объема используется.
В остальной части экрана отображается информация о выполняющихся в настоящее время процессах. Утилита top отображает максимальное количество процессов, которое умещается на экране. Для каждого процесса имеется отдельная строка, и этот список обновляется с заданным интервалом, отображая процессы по убыванию в соответствии с их ресурсоемкостью. Параметры каждого процесса содержатся в следующих столбцах:
-
PID: идентификатор процесса
-
USER: действующее имя пользователя процесса (если программа сменит пользователя командой
setuid(2), будет отображаться новое значение)
-
PR: приоритет задачи, используемый ядром для определения очередности использования центрального процессора той или иной задачей
-
NI: nice-уровень задачи, заданный системным администратором, чтобы повлиять на очередность использования центрального процессора той или иной задачей
-
VIRT: размер виртуального образа процесса, являющийся суммой размера используемого ОЗУ (резидентная часть) и размера данных, находящихся в swap-области (размер области подкачки)
-
RES: резидентная часть процесса, представляющая собой количество физического ОЗУ, используемого процессом
-
SHR: количество разделяемой памяти приложения, например, разделяемая память SysV или динамические библиотеки (*.so)
-
S: состояние процесса, например, ожидание, выполнение или зомби
-
%CPU: процент загрузки центрального процессора за последний интервал обновления
-
%MEM: процент загрузки ОЗУ (за исключением swap-области) за последний интервал обновления
-
TIME+: время в формате минуты:секунды:сотые, использованное процессом
-
COMMAND: имя выполняющейся команды
Утилита top позволяет быстро увидеть, какими задачами центральный процессор используется больше всего, а также дает удобный обзор данных о центральном процессоре и памяти. Вы можете отсортировать выводимый список задач по степени загрузки памяти, нажав клавишу M в окне утилиты top.
free
После того, как вы познакомились с утилитой top, вы сможете разобраться с утилитой free без особых проблем. В листинге 8 показан вывод данных утилиты free с использованием параметра -m, указывающего утилите выводить значения в мегабайтах.
Листинг 8. Использование команды free
# free -m
total used free shared buffers cached
Mem: 939 904 34 0 107 310
-/+ buffers/cache: 486 452
Swap: 2847 0 2847
|
Утилита free выводит сведения об использовании памяти по нескольким направлениям. Первая строка показывает информацию, которую вы уже видели при запуске утилиты top. Вторая строка содержит сведения об используемой и свободной памяти, не принимая во внимание буферы и кэш. Из листинга 8 видно, что приложениям доступно для использования 452 МБ памяти; этот объем будет взят из свободной памяти (34 МБ), буферов (107 МБ) или кэша (310 МБ).
Последняя строка показывает ту же статистику для swap-области, что и утилита top.
Получение сетевой статистики
Для получения сетевой статистики используются не такие прямые методы, как для центрального процессора, памяти и дисков. Основным способом является чтение счетчиков из /proc/net/dev, сообщающих о количестве передач через интерфейс, как в терминах пакетов, так и в терминах байтов. Если вы хотите получить значение за секунду, вы должны вычислить его самостоятельно, разделив разницу между двумя успешно измеренными величинами на интервал измерения. Другим способом является использование инструментов наподобие bwm для автоматизации сбора и отображения общей пропускной способности. На рисунке 2 показана работа утилиты bwm.
Рисунок 2. Использование команды bwm
Утилита bwm показывает различные характеристики использования сетевых интерфейсов. На рисунке 2 показаны мгновенные значения, измеряемые каждые полсекунды, хотя можно посмотреть средние значения за 30 секунд, максимальную пропускную способность и счетчики байтов. Из рисунка 2 вы можете видеть, что интерфейс eth0 получает трафик со скоростью около 20 КБ/с, который, вероятно, приходит с интерфейса vif0.0. Если вместо количества байтов в секунду вы хотите увидеть другие значения, вы можете переключаться между количеством битов, пакетов и ошибок с помощью клавиши u.
Для получения более детальной информации о том, какие хосты генерируют трафик, вам понадобится утилита iftop, которая имеет интерфейс, подобный интерфейсу утилиты top, отображающий сетевой трафик. Ядро не предоставляет эту информацию напрямую, поэтому для проверки пакетов, передаваемых по сетевому кабелю, iftop использует библиотеку pcap, для чего необходимы полномочия пользователя root. На рисунке 3 показана работа утилиты iftop при подключении к сетевому интерфейсу eth2.
Рисунок 3. Вывод данных команды iftop -i eth2
Утилита iftop показывает хосты, генерирующие самый большой трафик в вашей сети. По умолчанию для каждого сетевого взаимодействия используются две линии: одна линия используется для отправки данных, вторая – для получения. Если посмотреть на первый диалог между хостами mybox и pub1.kernel.org, то верхняя строка показывает трафик, переданный хостом mybox, а вторая строка – трафик, полученный им. Числа справа показывают средний трафик за последние 2, 10 и 40 секунд соответственно. Также вы видите черную полосу поверх имен хостов, которая является наглядным индикатором среднего значения за 10 секунд (шкала отображается в верхней части экрана).
Если проанализировать рисунок 3 более внимательно, то можно увидеть, что в первой передаче, вероятно, происходит скачивание данных, поскольку получено большое количество трафика (со средней скоростью около половины мегабита в секунду за последние 10 секунд) при небольшом количестве переданных данных. Исходящий трафик во второй передаче примерно равен входящему трафику, скорость постоянна и составляет около 75-78 кБ/сек. Это голосовой вызов G.711 через хост les.net моего VoIP-провайдера. Третья передача содержит входящий трафик со скоростью 128 КБ и небольшой исходящий трафик – это поток Интернет-радио.
Важен выбор интерфейса, к которому вы подключаетесь. На рисунке 3 используется внешний интерфейс на брандмауэре, который видит все пакеты после того, как они проходят IP-маскирование. Это приводит к тому, что внутренний адрес теряется. При использовании другого интерфейса, например, внутреннего, эта информация может сохраниться.
sar
Утилите sar посвящена целая отдельная статья (обратитесь к разделу Ресурсы). sar измеряет множество ключевых величин каждые 10 минут и позволяет вам получить эти данные. Вышеописанные инструменты дают ответ на вопрос "что происходит в данный момент?". Утилита sar отвечает на вопрос "что произошло на этой неделе?". Обратите внимание на то, что sar хранит данные только за последние 7 дней.
Чтобы настроить сбор данных, необходимо добавить две строки в файл crontab пользователя root. В листинге 9 приведен типовой пример файла crontab для использования sar.
Листинг 9. Конфигурация файла crontab для сбора данных утилитой sar
# Сбор статистики каждые 10 минут
0,10,20,30,40,50 * * * * /usr/lib/sa/sa1 -d 1 1
# Создание ежедневных отчетов и очистка старых файлов
0 0 * * * /usr/lib/sa/sa2 -A
|
Первая строка выполняет команду sa1 для сбора данных каждые 10 минут; эта команда запускает команду sadc, выполняющую фактический сбор данных. Эта задача является самостоятельной – она знает, в какой файл необходимо записывать информацию, и не требует дополнительного конфигурирования. Вторая строка выполняет команду sa2 в полночь, чтобы очистить старые файлы данных и собрать данные за прошедший день в удобочитаемый текстовый файл.
Важно проверить, как работает утилита sar в вашей системе, прежде чем использовать ее данные. В некоторых системах отключен сбор статистики дисков, и для его включения необходимо добавить параметр -d в командную строку вызова sa1 (в листинге 9 этот параметр добавлен).
Когда у вас имеются накопленные данные, вы можете запустить утилиту sar безо всяких дополнительных параметров, чтобы посмотреть использование центрального процессора за день. В листинге 10 приведен фрагмент вывода данных.
Листинг 10. Пример вывода данных команды sar
[root@bob cron.d]# sar | head
Linux 2.6.20-1.3002.fc6xen (bob.ertw.com) 02/11/2008
12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 0.18 0.00 0.18 3.67 0.01 95.97
12:20:01 AM all 0.08 0.00 0.04 0.02 0.01 99.85
12:30:01 AM all 0.11 0.00 0.03 0.02 0.01 99.82
12:40:01 AM all 0.12 0.00 0.02 0.02 0.01 99.83
12:50:01 AM all 0.11 0.00 0.03 0.05 0.01 99.81
01:00:01 AM all 0.12 0.00 0.02 0.02 0.01 99.83
01:10:01 AM all 0.11 0.00 0.02 0.03 0.01 99.83
|
К этому моменту вам должны быть знакомы значения, приведенные в листинге 10: они представляют собой различные характеристики работы центрального процессора, которые выводятся утилитами top,
vmstat и mpstat. Вы можете получить более подробную информацию, используя один или несколько параметров командной строки, приведенных в таблице 3.
Таблица 3. Краткий обзор параметров утилиты sar
| Параметр | Пример | Описание |
|---|
-A
|
sar -A
| Выводит всю информацию. Этот параметр, вероятно, не понадобится вам до тех пор, пока вы не захотите сохранить эти результаты в текстовом файле. Если же вам это нужно, данный процесс запускается каждую ночь как часть команды sa2. |
-b
|
sar -b
| Показывает транзакции и блоки, переданные и считанные с блочных устройств, подобно утилите iostat. |
-B
|
sar -B
| Показывает статистику подкачки, ту же, что и утилита vmstat. |
-d
|
sar -d
| Показывает активность диска, подобно команде iostat -x, включая время ожидания и обслуживания, а также длину очереди. |
-n
|
sar -n DEV or sar -n NFS
| Показывает активность сетевого интерфейса (подобно команде bwm), если используется ключевое слово DEV, или статистику NFS-клиентов, если используется ключевое слово NFS (используйте ключевое слово NFSD для сбора статистики работы демона NFS-сервера). Ключевое слово EDEV показывает информацию об ошибках на сетевом интерфейсе. |
-q
|
sar -q
| Показывает информацию об очереди на выполнение, суммарных размерах списков обработки и средних загрузках. Эти значения соответствуют значениям, выводимым утилитами vmstat и uptime. |
-r
|
sar -r
| Показывает информацию об использовании памяти, swap-области, кэша и буферов (как и утилита free). |
-f
|
sar -f /var/log/sa/sa11
| Считывает информацию из указанного файла. Имена файлов начинаются со дня месяца. |
-s
|
sar -s 08:59:00
| Указывает время начала интересующего интервала вывода информации, начиная с момента первого измерения после указанного времени. Если вы укажете 09:00:00, первое измерение будет выполнено в 09:10, поэтому отнимите одну минуту от желаемого времени. |
-e
|
sar -e 10:01:00
| Указывает время окончания интересующего интервала вывода информации. Следует добавить одну минуту к желаемому времени, чтобы убедиться, что все сработает. |
Вы можете комбинировать различные параметры для получения нескольких отчетов или отдельного файла со временем начала и окончания наблюдения.
df
Ваш жесткий диск является ограниченным ресурсом. Если в разделе заканчивается место, приготовьтесь к проблемам. Команда df показывает информацию о состоянии диска. В листинге 11 показан вывод команды df -h, которая выводит результаты в более дружественном формате.
Листинг 11. Проверка использования дискового пространства с помощью команды df -h
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
225G 169G 44G 80% /
/dev/hda1 99M 30M 64M 32% /boot
tmpfs 474M 0 474M 0% /dev/shm
|
В листинге 11 показана одна файловая система корневого раздела размером 225 ГБ, 44 из которых свободны. Раздел /boot имеет размер 99 МБ, 64 из которых свободны. tmpfs – это специальная файловая система, не относящаяся к какому-либо конкретному устройству. Если раздел заполнен, вы увидите, что в нем не осталось свободного пространства, и что он используется на 100%.
|  |