Выявление узких мест с помощью vmstat(8)


FreeBSD включает несколько программ, позволяющих выяснить производительность системы. В том числе vmstat(8), iostat(8) и systat(8). Мы обсудим программу vmstat, потому что я считаю ее наиболее полезной. Программа iostat(8) похожа на vmstat(8), a systat(8) выводит ту же информацию в более удобном виде.

Программа vmstat(8) предоставляет статистику использования виртуальной памяти в текущий момент. К выводу vmstat(8) надо привыкнуть, но он очень хорош тем, что отображает большой объем данных в маленьком пространстве. Наберите vmstat в командной строке и посмотрите, что получилось.

Экран разбит на шесть разделов: процесс (procs), память (memory), пейджинг (page), диски (disks), ошибки (faults) и процессор (cpu). Кратко рассмотрим каждый раздел, а затем углубимся в вопросы, имеющие наибольшее значение при исследовании производительности.

Процессы

Под заголовком procs есть три колонки.

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

b
Количество процессов, блокированных в ожидании системного ввода или вывода. Обычно это ожидание доступа к диску. Такие процессы будут запущены сразу после получения нужных им данных. Если это число велико, узким местом является диск.

w
Показывает процессы, которые были запущены, но полностью вытеснены. Если процессы начинают вытесняться регулярно, размер памяти не соответствует заданиям, выполняемым в системе.

Память

FreeBSD разбивает память на фрагменты, которые называются страницами. Все страницы, выделяемые процессам, имеют одинаковый размер. Размер страницы зависит от аппаратной платформы и операционной системы. Система обрабатывает страницы целиком, например, если требуется вытеснить память в пространство свопинга (область подкачки), она вытесняется целыми страницами. Раздел memory состоит из двух колонок.

avm
Среднее количество страниц виртуальной памяти, используемых системой. Если это значение чрезмерно велико, значит, система активно расходует виртуальную память.

fre
Количество страниц памяти, доступных для использования. Если это значение чрезмерно мало, налицо проблемы с памятью.

Пейджинг

Раздел page показывает, как работает система виртуальной памяти. Внутренние механизмы виртуальной памяти — тайная наука, которую я не буду здесь описывать.

flt
Количество ошибок из-за отсутствия страницы (page faults), когда нужной информации нет в памяти и приходится загружать ее с диска, из пространства свопинга.

re
Количество страниц, восстановленных из кэша и повторно использованных.

pi
Сокращение от pages in. Показывает, сколько страниц было перемещено из физической памяти в пространство свопинга.

po
Сокращение от pages out. Показывает, сколько страниц было перемещено из пространства свопинга в реальную память.

fr
Количество освобождаемых страниц в секунду.

sr
Количество просмотренных страниц в секунду.

Вытеснение памяти в пространство свопинга — это совсем неплохо, но постоянное перемещение страниц из области подкачки в реальную память свидетельствует о нехватке памяти. Большие значения в колонках fr и flt могут свидетельствовать о чрезмерном количестве короткоживущих процессов, например CGI-сценарии запускают множество других процессов или слишком часто планируется выполнение некоторых заданий в cron.

Диски

Раздел disks показывает все диски по именам устройств. Числа, показанные здесь, — это количество дисковых операций в секунду, ценная подсказка для тех, кто стремится выяснить, как хорошо диски справляются с нагрузкой. При любой возможности следует распределять дисковые операции между различными дисками, а диски размещать на разных шинах. Если один диск загружен больше остальных, а система ожидает доступа к диску, то наиболее часто используемые файлы надо переместить с одного диска на другой. Одна из постоянно встречающихся причин высокой нагрузки на диски — это аварийное завершение программ с формированием дампа памяти на диске, которые могут перезапускать себя. Например, CGI-сценарий, содержащий ошибку и аварийно завершившийся с формированием дампа памяти на диске, всякий раз, когда кто-то щелкает на ссылке, может существенно увеличивать нагрузку на жесткий диск.

Если дисков много, можно заметить, что не все они появляются в выводе vmstat. Программа vmstat(8) разрабатывалась для работы с экраном шириной 80 символов, поэтому она не может отобразить все диски, если их много. Однако если у вас широкий экран и вы не против того, чтобы вывод программы в ширину превысил ограничение в 80 символов, воспользуйтесь ключом -n, чтобы указать желаемое количество дисков для отображения.

Ошибки

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

in
Количество системных прерываний (запросов IRQ), полученных системой за последние пять секунд.

sy
Количество системных вызовов за последние пять секунд.

cs
Количество переключений контекста (context switches) за последнюю секунду или среднее число переключений в секунду с момента последнего обновления. (Например, если показания vmstat обновляются каждые пять секунд, в этой колонке отображается среднее число переключений контекста в секунду за последние пять секунд.)

Процессор

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

Использование vmstat

Как же применить эту информацию? Прежде всего, проверьте первые три колонки и выясните, чего ждет система. Если она ожидает доступа к процессору (колонка r), значит, не хватает мощности процессора. Если система ждет завершения дисковых операций (колонка b), то узким местом являются диски. Если часто происходит вытеснение процессов (колонка w), то в системе не хватает памяти. Другие колонки помогут более детально исследовать причины нехватки этих трех видов ресурсов.

Непрерывное выполнение vmstat

Применяя vmstat, вы наверняка больше заинтересованы в получении информации за определенный период времени, нежели в изучении состояния системы в тот или иной момент. С помощью ключа -w и числа можно запустить программу vmstat так, что она будет непрерывно обновлять показания на экране через заданное число секунд. Параметры использования виртуальной памяти пересчитываются внутренними счетчиками системы каждые пять секунд, хотя другие счетчики обновляются непрерывно:

Через каждые пять секунд в конце будет появляться новая строка с данными. Теперь можно спокойно наблюдать, как меняется производительность системы, когда запускаются запланированные задания или какие-либо программы. Завершив наблюдение, нажмите комбинацию клавиш Ctrl-C. В этом примере видно, что иногда процессы ждут освобождения процессора (о чем говорит изредка появляющееся число 1 в столбце r) и постоянно — доступа к диску.

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

Комментарии запрещены.