Команда iostat в linux

Обновлено: 04.07.2024

При оценке производительности системы, анализ дисковой подсистемы является не просто важным, но и обязательным этапом в совокупности мероприятий по оптимизации системы в целом. На практике довольно часто случается так, что именно из-за некорректной работы этого программно-аппаратного компонента не удаётся добиться заявленного или приблизиться к потенциальному уровню производительности. Дисковая подсистема — далеко не самый надёжный компонент в высоконагруженной системе и требует довольно тщательного обслуживания. Которое в свою очередь может определяться в результате умелого мониторинга и анализа работы дисков. Да и вообще устройств хранения. Стандартным инструментом, предоставляющим исчерпывающий функционал для задач анализа производительности дисковой подсистемы в Linux является утилита iostat – первоочередное средство для решения подобных задач в системном администрировании.

Установка утилиты iostat

В большинстве дистрибутивов Linux команда iostat недоступна, пока не установлен пакет systat.

Установка в Ubuntu/Debian

Установка в CentOS/RedHat

Синтаксис и основные опции команды iostat

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

В качестве параметра device задаётся анализируемое устройство хранения. Параметры интервал и количество_отчётов задают периодичность замеров и количество выводимых отчётов соответственно.

Среди дополнительных опций самыми полезными являются следующие:

Опция Значение
-p Показывает статистику для указанного устройства с детализацией по его разделам.
-s Выводит отчёты в кратком виде.
-x Выводит отчёты в подробном виде.
-t Выводит значение времени, в которое выполнялся/формировался каждый отчёт.

Остальные опции используются довольно редко. Об их назначении можно более подробно узнать из справочного руководства команды iostat: man iostat.

Примеры использования iostat

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


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

  • tps – количество операций ввода/вывода в секунду;
  • kB_read/s – количество операций чтения в секунду;
  • kB_wrtn/s – количество операций записи в секунду;
  • kB_read – суммарный объём считанных данных;
  • kB_wrtn – суммарный объём записанных данных.

Следует отметить, что при анализе значений tps, следует учитывать тот факт, что при одном запросе на пересылку данных может одновременно выполняться несколько запросов для ввода/вывода для сразу нескольких секторов. Поэтому данные результаты нужно сопоставлять с характеристиками самого устройства хранения (жёсткого диска) для получения объективной оценки. Ведь количество секторов может быть разным (в зависимости от используемого диска). И даже, если предположить, что обращение всегда происходит сразу ко всем секторам, то значение tps представляется довольно размытым.

Производительность дисковой подсистемы и её оптимизация

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

Чем большие расстояния преодолевает головка жёсткого диска, тем меньше его производительность. Такое случается например, когда происходит одновременное обращение к нескольким файлам, которые расположены на разных разделах одного диска. Это обстоятельство необходимо учитывать при разметке диска и делать это таким образом, чтобы файлы, к которым происходит одновременное обращение, находились в одной файловой системе/разделе.

Положительно сказывается на производительности дисковой подсистемы также и размещение файловых систем (особенно тех, к которым очень часто происходит одновременное обращение) на отдельные физические диски. Это и понятно, ведь каждое устройство управляется и работает независимо друг от друга. Такой подход часто применяют в веб-хостинге, размещая файлы данных и файлы журналов веб-сервера и/или СУБД (системы управления базами данных) таким образом, чтобы они находились на разных дисках.

Также хорошо сказывается на производительности применение виртуальных дисков. Когда в системе работает специальный драйвер. Который ведёт себя как драйвер устройства хранения. Но на самом деле производит чтение/запись непосредственно в память. Конечно, данный способ применим разве что ко всякого рода временным данным. Вроде кешей, буферов демонов и т. д. Однако, если максимально избавить систему от «бремени» обработки временных файлов через диски. То в результате можно получить ощутимый прирост в производительности дисковой подсистемы. И как следствие — всей системы в целом.

Заключение

В заключение следует отметить, что использование команды iostat – более, чем достаточно для оценки производительности дисков. А вот реализация мер по оптимизации и повышению эффективности дисковой подсистемы требует скрупулёзной подготовки и трудоёмкой работы по программно-аппаратной организации всей системы.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Как установить и использовать iostat в Linux

(2 оценок, среднее: 3,00 из 5)

Как установить и использовать IOSTAT

I OSTAT, легкая статистика ввода/вывода, является популярным инструментом мониторинга системы в Linux, которая позволяет пользователям идентифицировать различные проблемы с производительностью, а также получить CPU и системную информацию из системы сбора статистических данных, которые она собирает. Эти статистические данные, как и предполагает название IOSTAT, включают операционную систему хранения данных ввода и вывода. Как инструмент сбора статистики, iostat является ценным для любого системного администратора.

Эта статья охватит установку и использование iostat на сервере с операционной системой Linux.

Начало

Для завершения этой статьи необходимо следующее:

Руководство

Процесс установки iostat очень прост. iostat является частью пакета sysstat, который можно установить на вашей соответствующей системе одной из команд ниже:

CentOS

Ubuntu / Debian

Запуск IOSTAT

IOSTAT инструмент, который доступен через команду iostat. Введите эту команду, чтобы увидеть, как она работает:

Вот пример вывода при вызове команду iostat:

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 210.53 1022.33 1394.72 2214048305 3845623328
sda1 160.20 473.24 1422.29 1844686896 3295752889
sda2 21.00 320.12 145.21 1000012186 1668872653

Хотя этот отчет может, на первый взгляд, показаться очень сложным, на самом деле довольно прост. Мы объясним, по разделам, каждый аспект IOSTAT отчета, так что вы можете легко использовать отчеты для себя:

Раздел 1: Отчет CPU

В первой части отчета (площадь с процентными значениями), вы найдете статистику CPU. Здесь мы разбиваем для вас статистику, которую вы найдете. Для получения соответствующей статистики, мы добавили полезные данные жирным шрифтом, так что вы можете увидеть, что включает в обзор:

Что касается использования ЦП на уровне пользователя/приложения с и без приоритета, так и на уровне системы/ядра:

  • %user: В этом столбце отображается процент загрузки центрального процессора, что произошло во время выполнения на уровне пользователя / приложения.
  • %nice: В этом столбце также отображается процент загрузки центрального процессора, которая происходит во время выполнения на пользовательском уровне, однако на этот раз с хорошим приоритетом. Это означает, что только команды вызывается с Linux командой, что снижает приоритет ниже стандартного уровня, приведены в этой статистике.
  • %system: В этой колонке вы можете увидеть процент загрузки центрального процессора, происходящего во время выполнения в системе (также известный как ядро) уровне, в отличие от приведенных выше статистических данных.

Что касается простоя процессора и время ожидания:

  • %iowait: Эта статистика является процент времени, когда процессор или процессоры простаивали, в течение которого система имела выдающийся диск запроса ввода / вывода.
  • %steal: Второй в последней колонке продолжает показывать процент времени, проведенного в непроизвольном ожидании виртуальным процессором или процессорами в то время как гипервизор обслуживал другой виртуальный процессор.
  • %idle: Последняя колонка в этом разделе показывает процент времени, когда процессор или процессоры простаивали, и система не имела запрос к диску I/O (вход/выход).

Раздел 2: Отчет использование устройства

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

  • Device: Самый первый столбец показывает имя устройства или раздела , как указано в каталоге /Dev.
  • tps: Следующий столбец показывает статистику для данного устройства, и отображает количество передач в секунду (tps) , которые были выданы на устройстве. Занятыми процессорами будет иметь большее количество.
  • Blk_read/s: Эта статистика, блоки считывания в секунду, показывает объем данных, считываемых из устройства, как выражено в ряде блоков (например , килобайтах) в секунду.
  • Blk_wrtn/s: Аналогично, блоки записи в секунду показан с объемом данных, записываемых на устройство также экспрессируется в ряде блоков (например , килобайтах) в секунду.
  • Blk_read: Общее число блоков, считываемых для каждого устройства отображаются во втором в последней колонке.
  • Blk_wrtn: Точно так же, отображается общее количество блоков, записанных для каждого устройства, находится в последнем столбце.

Расширенные отчет IOSTAT

1. Показать мегабайт вместо байта

По умолчанию, система ввода и вывода IOSTAT измеряет в единичных байтах. Но как только байт становится мал, для более легкой усвояемости людьми мы можем преобразовать отчет для отображения отчетов с мегабайтах, которые значительно крупнее и гораздо легче понять с первого взгляда. Вызов IOSTAT используя флаг -m для отображения мегабайта внутри отчетов:

Обратите внимание на то, как выход в настоящее время изменен, как показано в этом примере вывода:

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 210.53 0.63 0.74 1033680 1732461
sda1 160.20 0.28 0.64 1102131 1104562
sda2 21.00 0.16 0.14 392451 321456

2. Расширенный статус вывода

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

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

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s \
sda 7684.00 19.00 2321.00 523.00 81848.00 5287.00 \
avgrq-sz avgqu-sz await svctm %util
29.86 32.99 11.17 0.34 100.00

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

3. Запустите IOSTAT с задержкой

Можно указать IOSTAT принимать несколько отчетов с задержкой, известный как интервал. Это делается с помощью параметра OPTIONS, присвоенный команде IOSTAT. Однако, если только параметр INTERVAL задан, то IOSTAT будет непрерывно генерировать отчеты на этом интервале, пока вы не остановите его! Таким образом, мы также предоставим второй параметр, известный как параметр COUNT, который также является числом.

Они предоставляются IOSTAT в виде:

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

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 210.53 0.62 0.74 1022670 1752461
sda1 160.20 0.29 0.64 1012132 1204462
sda2 21.00 0.17 0.14 394452 312446

Через три секунды.

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 210.53 0.62 0.74 1022670 1752461
sda1 160.20 0.29 0.64 1012132 1204462
sda2 21.00 0.17 0.14 394452 312446

Еще через три секунды.

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 210.53 0.62 0.74 1022670 1752461
sda1 160.20 0.29 0.64 1012132 1204462
sda2 21.00 0.17 0.14 394452 312446

4. Выводить только один отчет на раздел

IOSTAT также позволяет изменять отчет, показать только первый раздел CPU или только раздел второго диска. Для того, чтобы показать только статистику CPU, мы можем использовать флаг -c с IOSTAT с помощью команды:

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

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

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60

Через две секунды.

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60

Еще через две секунды.

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60

Еще через две секунды.

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60

Еще через две секунды.

Linux 2.6.32x86_64 (dev-db) 03/01/2016
avg-cpu: %user %nice %system %iowait %steal %idle
4.00 0.00 0.40 1.00 0.00 94.60

Вывод

Это руководство показало основы использования мониторинга системы IOSTAT и инструмент статистики для вашей системы Linux. Более подробную информацию о возможных изменениях в отчетах можно найти в онлайн-странице руководства для IOSTAT, с помощью которых вы можете получить максимальную пользу.

Если вы нашли это введение в IOSTAT полезной, поделитесь ею с друзьями!

Как установить и использовать IOSTAT

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Команда iostat в Linux используется для мониторинга системной статистики ввода-вывода для устройств и разделов. Он контролирует ввод / вывод системы, наблюдая за временем, в течение которого устройства активны, относительно их средней скорости передачи. Производственные отчеты iostat могут использоваться для изменения конфигурации системы, чтобы повысить баланс ввода / вывода между физическими дисками. iostat входит в пакет sysstat . Если у вас его нет, вам нужно сначала установить.

Команда для установки на разных дистрибутивах:

  • На RedHat / CentOS / Fedora
  • В Debian / Ubuntu / Linux Mint

Примечание: 10 команд Linux iostat для составления статистики процессора и ввода-вывода перечислены ниже:

  • iostat: получить отчет и статистику.
  • iostat -x: показать более подробную статистическую информацию.
  • iostat -c: показать только статистику процессора.
  • iostat -d: показать только отчет об устройстве.
  • iostat -xd: Показать расширенную статистику ввода / вывода только для устройства.
  • iostat -k: захват статистики в килобайтах или мегабайтах.
  • iostat -k 2 3: Показать статистику процессора и устройства с задержкой.
  • iostat -j ID mmcbkl0 sda6 -x -m 2 2: Показать статистику постоянных имен устройств.
  • iostat -p: Показать статистику для блочных устройств.
  • iostat -N: Показать статистическую информацию lvm2.

1) Команда iostat: команда iostat в linux используется для получения отчета и статистики.

Синтаксис:

Пример: вот пример.


Первый раздел содержит отчет о процессоре:

  • % user: показывает процент использования ЦП при выполнении на уровне пользователя.
  • % nice: показывает процент использования ЦП, произошедшего при выполнении на уровне пользователя с хорошим приоритетом.
  • % system: показывает процент использования ЦП, произошедшего при выполнении на уровне системы (ядра).
  • % iowait: показывает процент времени, в течение которого ЦП или ЦП находились в режиме ожидания, в течение которого система имела невыполненный запрос дискового ввода-вывода.
  • % steal: показывает процент времени, затраченного на принудительное ожидание виртуальным процессором или процессорами, пока гипервизор обслуживал другой виртуальный процессор.
  • % незанятости: показывает процент времени, в течение которого ЦП или ЦП находились в состоянии простоя, и система не имела невыполненного запроса дискового ввода-вывода.

Второй раздел вывода содержит отчет об использовании устройства:

  • Устройство: имя устройства / раздела указано в каталоге / dev .
  • tps: количество передач в секунду, которые были выданы устройству. Более высокое значение tps означает, что процессор загружен.
  • Blk_read / s: показывает количество данных, считанных с устройства, выраженное в количестве блоков (килобайт, мегабайт) в секунду.
  • Blk_wrtn / s: объем данных, записываемых на устройство, выраженный в количестве блоков (килобайт, мегабайт) в секунду.
  • Blk_read: показывает общее количество прочитанных блоков.
  • Blk_wrtn: показывает общее количество записанных блоков.

iostat использует файлы, указанные ниже, для создания отчетов:

  • /proc/stat Содержит системную статистику.
  • /proc/uptime Содержит время работы системы.
  • /proc/diskstats Содержит статистику дисков.
  • /sys Содержит статистику по блочным устройствам.
  • /proc/self/mountstats Содержит статистику для сетевых файловых систем.
  • /dev/disk Содержит постоянные имена устройств.

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

Синтаксис:

Пример:


  • avg-cpu: Он сообщает нам информацию о блоке процессора.
  • Devide: он сообщает нам информацию о блоке устройства. Чтобы быть уверенным, что вы находитесь на хорошем устройстве.
  • % util : говорит нам о том, сколько времени устройство хранения выполняло выдающуюся работу (было занято).
  • svctm : указывает, насколько быстро ваша подсистема ввода-вывода отвечает на запросы в целом, когда занята. На самом деле, чем меньше вы загружаете свою систему, тем выше svctm.
  • await : указывает на скорость выполнения запросов. Это просто среднее.
  • avgqu-sz : сообщает, сколько запросов в очереди. Низкий = либо ваша система не будет загружена, либо имеет сериализованный ввод-вывод и не может правильно использовать базовое хранилище. Высокий = ваш программный стек достаточно масштабируем, чтобы быть загруженным должным образом в основе ввода / вывода.
  • avgrq-sz : это просто средний размер запроса, который может указывать на тип рабочей нагрузки.
  • wsec / s & rsec / s : он сообщает нам количество читаемых и записываемых секторов в секунду. Разделите на 2048, и вы получите мегабайт в секунду.
  • r / s & w / s : он сообщает нам запросы на чтение и запись в секунду. Эти цифры являются показателями емкости ввода / вывода, хотя, конечно, в зависимости от того, какое давление оказывается на подсистему ввода / вывода (размер очереди!), Они могут варьироваться.
  • rrqm / s & wrqm / s : сообщает, сколько запросов было объединено на уровне блоков.

3) Команда iostat -c: эта команда показывает только статистику процессора. Можно показать статистическую информацию и отчет нашего процессора с параметром -c .

Синтаксис:

Пример:


4) Команда iostat -d: эта команда отображает только отчет об устройстве. Отображать статус использования устройства можно только с помощью опции -d . Будет собираться список информации для каждого подключенного устройства.

Синтаксис:

Пример:


5) Команда iostat -xd: эта команда показывает нам расширенную статистику ввода-вывода только для устройства. Мы можем отображать расширенную статистику с одной стороны, а с другой стороны мы можем отображать расширенную статистику. Это означает, что мы можем отображать расширенную статистику только для устройств с помощью опции -xd как -xd ниже:

Синтаксис:

Пример:


6) Команда iostat -k: эта команда записывает статистику в килобайтах или мегабайтах. По умолчанию iostat измеряет систему ввода-вывода в байтах. Чтобы было проще читать, мы можем преобразовать iostat, чтобы он отображал отчеты в килобайтах или мегабайтах.

Синтаксис:

Пример:


7) Команда iostat -m: используется для создания отчета с мегабайтами.

Синтаксис:

Пример:


Синтаксис:

Пример:


9) Команда iostat -c 2 2: Показать отчет только о процессоре с интервалом в 2 секунды и 2 раза.

Синтаксис:


Пример:

10) iostat -d sda7 sda6 2 2 Команда: Показать отчеты только для устройств sda6 и sda7 с интервалом в 2 секунды и 2 раза.

Зачастую работа «в поле» требует сбора и анализа информации на сайте заказчика в условиях наличия крайне скудного списка утилит. В частности собрать информацию об использовании системы ввода-вывода в течении дня.

В статье я попробую показать, как располагая только iostat и gnuplot можно попробовать провести анализ системы и какие выводы можно сделать.

Я не претендую на доскональное владение предметом и точное использование терминов. Более того, я постараюсь говорить «обычным» языком и не бросаться терминами.

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

Небольшой ликбез

  • Пропускная способность (байт в секунду) — максимальная линейная скорость с которой устройство пишет или читает один, но очень большой файл.
  • IOPS (операций в секунду) — число запросов, отправленных на устройство. Это скорость работы с большим числом мелких файлов.
  • Время обработки (миллисекунд) — время за которое в среднем обрабатывается запрос на ввод-вывод включая ожидание в очереди, причем наиболее характерно именно ожидание, ибо оно зависит от загрузки, а не собственно размера запроса. Чем выше это время, тем «тормознутее» отзыв системы на запрос приложения, но остальные приложения в принципе не затрагиваются.
  • Загрузка (проценты) — оценка загруженности системы на ввод-вывод. При значениях близких к 100% система «встает», в том числе все приложения. Процессора уходят в iowait, а процессы, желающие ввода-вывода — в [Disk] Sleep

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

Базовые характеристики

  • имеет пропускную способность около 300 Мегабайт в секунду при последовательном доступе
  • выдает порядка 150 iops (в попугаях)
  • при времени обработки запросов порядка 10 мс

Если тесты показывают, что система работает, выдавая примерно эти цифры, значит никто при тестировании не «налажал», никаких чудес нет и можно работать дальше. Иначе стоит сначала разобраться что с железом (может RAID восстанавливается или винт сыпется).

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

Измерения

Подготовка

Для начала разумно сохранить df -hl для того чтобы понимать о каких разделах идет речь.

Кстати, полезно еще помнить на каком из разделов располагается swap.

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

Наблюдение

В отличии от других утилит iostat не очень приспособлен для логирования с учетом времени. Ну ничего, awk в помощь.

Строчка для получения лог файла:

Естественно, запускать это надо в скрине.

Следует обратить внимание на параметр -t 10. Это интервал, за который усредняются значения и вычисляются «средние» в секундах.

Если значение будет слишком мало — будут на графике лишние пики и выбросы. Если слишком велико — существенных пиков заметно не будет. По моему интервал 3-10 секунд оптимальный.

Ввод нашего лога будет примерно таким:

Первый блок это измерения за период работы с момента старта. Остальные за время указанный интервал.

Запускаем это логгирование на некий интервал (например пару суток, а потом просим прислать лог.

Анализ

Ну что по таким цифрам можно сказать?

В первую очередь обратим внимание на последнюю колонку %util. Хотя бы потому, что большое значение этого параметра (90%-100%) для пользователя выглядит как «сервер висит». У нас sda загружен менее чем на 9%. Нормально. Причем в основном разделом sda7(SQL).

Далее параметры записи/чтения:

  1. пропускная способность колонки rkB/s, wkB/s. Пишем 219 KБ/с
  2. iops колонки r/s, w/s — 10,5 запросов в секунду
  3. время обработки запроса: await — 156 ms, из них собственно выполнение svctm 8 ms

О чем это говорит:
Диск не загружен, числа не большие. Но запросы стоит в очереди 200ms время приемлимое, но при «первом шухере расколется», сама подсистема паршивенькая. Хотя однозначно сказать нельзя? ибо опять таки диск не сильно грузится вот и не торопятся данные отправлять из очереди.

Что еще полезно: rrqm/s, wrqm/s это собственно число запросов, которые приложения попросили выполнить, но система смогла их объединить в блоки в среднем по avgrq-sz байт.

  • Если вы откроете 100500 файлов, начнете произвольно прыгать по открытым файлам и заниматься прочими излишествами, выкушаете кеш системы — r/s,w/s начнут стремиться к rrqm/s и wrqm/s, и avgrq-sz падать. Это ситуация чистого Random Access — самый медленный сценарий использования диска.
  • А если все будет последовательненько, то стремиться они будут к единичке (а лучше к нолику), а avgrq-sz расти. Единственный запрос за интервал — это чистой воды Sequential Access — самый быстрый сценарий использования диска.

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

Графики

Собственно смотреть логи глазками — дело неблагодарное. Посему написал несколько «скриптов» bash и gnuplot чуть чуть парсящее логи и строящее графики.

Построение графика для одного устройства по 1-му параметру плюс гладкая безье:


И то же самое график для одного устройства по 2-ум параметрам:


Ну а так как устройств много, да и серверов несколько, а ручками запускать лень, я написал еще парочку примитивных скриптов: plot_info.sh


За код прошу не пинать писалось для работы быстро и на коленке( для чего собственно скрипты умными людьми и придумывались).

В итоге получаем симпатичные графики.


Резюмируя

В качестве резюме пара «успешных историй»

Обычно у пользователя симптом только один: все тормозит. Ниже буду приводить примеры как анализ логов iostat помог выявить проблему, или указать что проблема, не в диске.

История первая

В iostat увидели аномально высокие значения rKB/s при выполнении самых простейших запросов, включая запросы с LIMIT 1 (десятки и сотни мегабайт) — явно читаем больше чем надо.
Из этого смогли в итоге показать, что не отрабатывал автовакуум (хоть и запускался). Дальнейший лог вакуума показал, что max_fsm_page на два порядка ниже необходимого.

История вторая

Длительный коммит транзакции порядка 60 секунд содержащей всего с десяток DDL запросов. Все грешили на высокую «фоновую» нагрузку, типа от этого и тормозит. Но iostat всячески показывал, что в это время никакой дополнительно аномальной нагрузки на диск нет. В итоге дело в «небольшом» косяке СУБД PostgreSQL 8.3 связанное с большим числом (пулом) не использующихся соединений…

Немного о том вокруг чего все это

Так получилось, что разрабатываемый нами продукт имеет в своем составе некое хранилище на базе СУБД PostgreSQL. И живет эта база без какого либо присмотра со стороны DBA, и нашему саппорту доступа к ней тоже не дают. Клиентов на чтение у этой базы немного — несколько десятков. А вот клиентов на запись хоть и не много (до сотни), только пишут они 24/7 когда сотни записей в секунду, а когда и тысячу-другую. Ну и как завещал великий Мерфи — в тестовой лаборатории на синтетике все всегда работает, а вот в поле на реальных данных «все ужасно тормозит».

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

Другой вопрос — комплекс сложный, лишнего железа нет. Поставить дополнительный софт конечно можно, но мы все понимаем что даже бесплатный софт, не бесплатен, а платить за дополнительную установку, настройку и поддержку заказчик не хочет. И опять таки лишний компонент в системе никак не способствует увеличению надежности.

В итоге имеем:
Сервер уровня HP DL380G7 с живущей на ней СУБД PostgreSQL и обвязкой из всяческих клиентов писанных на C++.
Операционная система на базе урезанных дистрибутивов Fedora или CentOS.
Хранение на базе нормального RAID контролера с десятком SAS винтов.
Из утилит доступен только самый минимум, включающий iostat и gnuplot.

Читайте также: