Краткое руководство по устранению проблемы Linux IOWait

Высокое ожидание ввода-вывода в Linux является распространенной проблемой производительности Linux. Сегодня мы рассмотрим, что означает io wait и что способствует возникновению этой проблемы.

top

Что такое ожидание ввода-вывода в Linux (IO wait)?

Столбец iowait в верхнем выводе команды показывает процент времени, в течение которого процессор ожидал завершения ввода-вывода. Это указывает на то, что система ожидает дискового или сетевого ввода-вывода. Ожидание ввода-вывода связано с ресурсом процессора на сервере.

Определите, является ли проблема ввода-вывода причиной медленной работы системы

Убедиться, что система работает медленно из-за ввода-вывода, можно с помощью нескольких команд, но самой простой является команда Linux top. Ознакомьтесь с этой статьей, чтобы понять, что такое CPU Usage us sy wa hi в Linux Top.

Из строки CPU мы можем увидеть процент процессора, потраченного на ожидание ввода/вывода; чем выше число, тем больше ресурсов процессора ожидают разрешения ввода/вывода.

wa - iowait

Количество времени, в течение которого процессор ожидает завершения ввода/вывода.

Определите, на какой диск идет запись

Команда top выше объясняет ожидание ввода-вывода в целом, но не указывает, какой диск затронут, и чтобы узнать, какой диск вызывает проблему, мы используем другую команду Iostat. Ознакомьтесь с этой статьей по устранению проблем с дисками в Linux для получения дополнительной информации.

В приведенном выше примере Iostat будет обновляться каждые 2 секунды, печатая 5 раз информацию, а опция X - распечатывать расширенную информацию.

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

Например, эта команда будет напечатана 5 раз, второй отчет - это статистика из первого отчета, третий основан на втором, и так далее. В приведенном выше примере %utilized для sda составляет 111,41%, что является хорошим признаком того, что процесс записывается на диск sda.

В дополнение к %utilized мы можем получить от iostat более богатые ресурсы, такие как запросы на чтение/запись в миллисекунду (rrqm/s & wrqm/s), чтение и запись в секунду (r/s & w/s), и, конечно, многое другое. В приведенном выше примере наш проект, похоже, читает и записывает очень много информации. Это очень полезно для нас, чтобы найти соответствующий процесс.

Найдите процессы, которые вызывают высокое ожидание ввода-вывода

Самый простой способ найти виновника - [использовать Linux Iotop для проверки использования дискового ввода-вывода на процесс], посмотрев на статистику iotop, мы можем легко определить sshd как виновника.

Хотя Iotop является очень мощным инструментом и прост в использовании, он не установлен по умолчанию на всех операционных системах Linux.

Найдите, какой файл вызвал iowait

Команда lsof может показать все файлы, которые открывает процесс, или все процессы, которые открывают файл. Из этого списка мы можем узнать, какие именно файлы записываются, в зависимости от размера файла и конкретных данных файла ввода-вывода in/proc

Мы можем использовать метод-p для уменьшения вывода, PID - это конкретный процесс

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

Из результатов вышеприведенной команды мы можем определить, что /tmp является корнем логического диска нашей среды.

Есть два основных шага для устранения проблемы IOwait.

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