Время ожидания ввода-вывода – это показатель, используемый для измерения количества времени, в течение которого центральный процессор ожидает завершения операций дискового ввода-вывода. Большое время ожидания ввода-вывода указывает на простаивающий процессор и невыполненные запросы ввода—вывода – хотя это может и не сделать систему неработоспособной, но ограничит производительность процессора.
Ожидание ввода-вывода процессора означает, что, хотя ни один процесс не находился в работоспособном состоянии, выполнялась по крайней мере одна операция ввода-вывода. Проще говоря, ожидание ввода-вывода – это время, затраченное процессором на ожидание завершения ввода-вывода.
Что вызывает высокое время ожидания ввода-вывода?
Ожидание ввода-вывода просто указывает на состояние ЦП или ядер ЦП. Высокое ожидание ввода-вывода означает, что ЦП не выполняет запросы, но необходимо дальнейшее исследование для подтверждения источника и эффекта.
Вот несколько возможных причин высокого времени ожидания ввода-вывода:
- Узкие места на уровне хранилища, из-за которых диску требуется больше времени для ответа на запросы ввода-вывода
- Очередь запросов ввода-вывода на уровне хранилища, которые приводят к увеличению задержки
- Блокируйте устройства (например, физические диски), которые работают слишком медленно или просто достигли точки насыщения
- Процессы, находящиеся в режиме непрерывного ожидания
- Процессы, выполняющие интенсивные операции чтения и записи на диск
- Замена раздела или файла, выполняемая из-за нехватки оперативной памяти в основной или гостевой операционной системе
- Операции дискового и сетевого ввода-вывода, которые являются наиболее распространенной причиной замедления работы системы
- Медленный диск или неисправный RAID-массив, который задерживает доступ к памяти для операций чтения и записи
Влияет ли ожидание ввода-вывода на производительность вашей системы?
Высокое ожидание ввода-вывода заставляет сервер обрабатывать более высокую пропускную способность для выполнения других вычислений во время ожидания запросов ввода-вывода. Ожидание ввода-вывода – это распространенный показатель для анализа производительности системы. Когда часто возникает длительное ожидание ввода-вывода, это может негативно повлиять на производительность системы, замедляя ее работу или вызывая такие проблемы, как низкая пропускная способность транзакций в базе данных и ухудшение работоспособности приложений и баз данных.
Диагностика времени ожидания ввода-вывода в Linux
Две команды, наиболее часто используемые для определения и устранения неполадок времени ожидания ввода-вывода в Linux, – это top и vmstat. Эти команды будут отображать различную статистику на уровне процессора, включая время ожидания ввода-вывода.
С помощью команды top
Команда top – самая простая и наиболее широко используемая команда для определения времени ожидания ввода-вывода в Linux. Он отображает динамическое представление системы в режиме реального времени, статистику на уровне процессора и запущенный список процессов, управляемых ядром.
Синтаксис:
top [options]
Пример:
При выполнении команды top отобразится результат, аналогичный показанному ниже:
Мы сосредоточимся на строке %Cpu(s). Она отображает, среди других важных статистических данных, время ожидания ввода-вывода. Время ожидания ввода-вывода обозначается меткой wa в строке %Cpu(s) .
wa обозначает процент времени, в течение которого центральный процессор ожидал завершения ввода-вывода. Если вы используете многоядерную процессорную систему, вы можете нажать 1 во время выполнения команды top, чтобы получить разбивку загрузки процессора по ЦП.
С помощью команды vmstat
Команда vmstat – это еще один инструмент мониторинга производительности, предоставляемый Linux. Он предоставляет информацию о памяти, процессах, процессоре и многом другом. По умолчанию vmstat отображает статистику с момента последней перезагрузки системы. Он также может показывать статистику в реальном времени, которая обновляется через указанный интервал.
Синтаксис:
vmstat [options][delay [count]]
Два параметра, обычно используемые с командой vmstat, следующие:
- delay: Этот параметр используется для непрерывного обновления отчетов после указанной задержки в секундах.
- count: Этот параметр используется для определения количества необходимых обновлений. Значение по умолчанию бесконечно.
Пример:
Выполнение команды vmstat выдаст вам результат, аналогичный показанному ниже:
Выходные данные разделены на четыре раздела; мы сосредоточимся на разделе CPU. Столбцы в этом разделе аналогичны строке % Cpu (ов) команды top. Наряду со временем ожидания ввода-вывода (wa) мы также получаем некоторую дополнительную информацию с помощью команды vmstat, такую как общая свободная память или количество блоков, заменяемых на ввод-вывод и обратно. Например, меньшее количество свободной памяти может привести к увеличению времени ожидания ввода-вывода.
Определение процессов, вызывающих большое время ожидания ввода-вывода
Как только вы убедитесь, что имеете дело с большим временем ожидания ввода-вывода, следующим шагом должен стать поиск процессов, ответственных за эти операции ввода-вывода. Одна из самых простых и наиболее часто используемых команд для этого – iotop.
С помощью команды iotop
Команда iotop идентична команде top в том смысле, что она используется для мониторинга использования дискового ввода-вывода вместе со списком запущенных процессов или потоков, ответственных за это. Он основан на Python и требует доступа к ядру для мониторинга процессов, выполняющих ввод-вывод.
Синтаксис:
iotop [options]
Пример:
Выполнение команды iotop выдаст вам результат, аналогичный показанному ниже:
Первая строка содержит общую пропускную способность диска для чтения и записи. В следующей строке отображается фактическая пропускная способность операций чтения и записи, выполняемых процессами или потоками, выполняющими ввод-вывод в данный момент. В следующем разделе отображается список запущенных процессов с данными об их текущем использовании дискового ввода-вывода. Наиболее важным столбцом здесь является столбец ввода-вывода, который отображает процент времени, в течение которого процесс выполнял операции ввода-вывода, по отношению к общему времени обработки. Этот конкретный список процессов отсортирован в этом столбце в обратном порядке.
Одним из наиболее часто используемых параметров этой команды является -o или -only. Запуск вместе с командой (iotop -o), это сужает результаты до запущенного списка процессов, которые фактически выполняют ввод-вывод.
Идентификация дисков, на которые записывается ввод-вывод
Команды top и vmstat сообщают нам о времени ожидания ввода-вывода, а iotop команда помогает нам идентифицировать процессы, выполняющие операции ввода-вывода. Еще один важный фактор, который следует учитывать, – это то, какие диски используются в этих операциях. Команда iostat предоставляет эту информацию.
С помощью команды iostat
Команда iostat отображает статистику ввода/вывода системы. Она генерирует отчеты на уровне устройства, отслеживая активный период времени в зависимости от средней скорости передачи. И, подобно командам top и vmstat , iostat также отображает статистику процессора.
Синтаксис:
iostat [option] [interval] [count]
Параметры интервала и количества здесь аналогичны параметрам команды vmstat, и они используются для отображения обновлений в реальном времени бесконечно или только для определенных значений.
Пример:
Выполнение команды iostat выдаст вам результат, аналогичный показанному ниже:
В первой строке выше показана средняя статистика процессора, включая время ожидания ввода-вывода. Оно представляет собой то же значение, что и у wa в командах top и vmstat. В следующих разделах приведены следующие данные для всех устройств и разделов:
- Device: Название раздела или устройства
- tps: передача данных в секунду. У перегруженного или занятого процессора скорость передачи данных всегда будет выше.
- Blk_read/s (kB_read/s): количество блоков данных, считываемых с устройства в секунду
- Blk_wrtn/s (kB_wrtn/s): Количество блоков данных, записываемых на устройство в секунду
- Blk_read (kB_read): общее количество блоков, прочитанных с этого устройства с момента последней перезагрузки
- Blk_wrtn (kB_wrtn): общее количество блоков, записанных на это устройство с момента последней перезагрузки
Исправление высокого времени ожидания ввода-вывода в Linux
После того, как мы определили процессы, вызывающие большое время ожидания ввода-вывода, и задействованные диски, мы можем применить несколько исправлений. Это некоторые из наиболее распространенных методов минимизации большого времени ожидания ввода-вывода.:
- Уменьшите частоту операций чтения и записи с диска за счет сокращения операций ввода-вывода, таких как запросы к базе данных.
- Убедитесь, что операционная система обновлена до последней версии со всеми установленными исправлениями, чтобы сократить время ожидания ввода-вывода, вызванное ошибками в ОС.
- Обновите жесткий диск и оперативную память на сервере и установите диски с более высокой частотой вращения или SSD с высокой производительностью ввода-вывода.
- Если пользовательское время процессора слишком велико, попробуйте завершить процесс или процессы, наносящие ущерб.
- Проверьте использование подкачки — высокое использование подкачки означает, что в системе фактически не хватает оперативной памяти. В этом случае увеличение объема оперативной памяти может сократить время ожидания ввода-вывода.
- Проверьте, нет ли потенциальной утечки памяти — некоторые приложения могут потреблять память, не освобождая ее после использования. Это может привести к утечке памяти и, в конечном итоге, к большому времени ожидания ввода-вывода.
Заключение
При устранении неполадок с высокой задержкой ввода-вывода в Linux важно в качестве первого шага понять первопричину. Затем команды top и vmstat могут помочь диагностировать высокое время ожидания ввода-вывода, в то время как iotop и iostat могут помочь в устранении неполадок, определяя процессы и диски, вызывающие высокое время ожидания ввода-вывода. Мы узнали, что существует несколько способов справиться с большим временем ожидания ввода-вывода в зависимости от его причины. Сосредоточьтесь на минимизации времени ожидания ввода–вывода – чем меньше время ожидания ввода-вывода, тем лучше будет работать ваша система.