Высокий IOWAIT может стать настоящей проблемой в linux, заставляя ваш сервер работать с перебоями. Вопрос в том, насколько высокий уровень является слишком высоким? Когда стоит беспокоиться?
Сначала мы поговорим о том, что такое IOWAIT, обсудим связанные с ним статистические данные и способы их интерпретации, и, наконец, как решить, является ли IOWAIT причиной проблемы.
Что такое IOWAIT?
Как показывает "wa%" в команде "top", iowait - это процент времени, в течение которого центральный процессор ожидает обращения к диску, прежде чем он сможет выполнить полезную работу. Во времена одноядерных серверов с одним процессором этот процент был довольно значимым сам по себе. Значение 25% означало, что система ожидает обращения к диску 1/4 часть времени. Теперь, с многоядерными серверами и гиперпоточностью, это процентное значение не всегда много значит. Например, на четырехъядерной системе с гиперпоточностью значение wa% 12,5% может означать, что одно ядро процессора все время ожидает диск - потенциально серьезная проблема, влияющая на производительность сервера, - или это может означать, что все ядра процессора ожидают 1/8 часть времени - гораздо менее серьезная проблема.
Поэтому на современных серверах значение IOWAIT само по себе мало что значит. Если вы видите, что оно увеличивается больше, чем вам хотелось бы, разумно будет посмотреть на другие значения, чтобы определить, есть ли реальная проблема или нет. Таким образом, в наши дни IOWAIT больше привлекает ваше внимание к поиску реальных проблем, а не говорит о том, есть ли они или нет.
На изображении примера вы можете увидеть "0.0 wa", что означает 0,0% iowait. Безусловно, даже с учетом уже упомянутых предостережений, это указывает на то, что iowait не является проблемой.
Но что, если это значение выше?
Учитывая проблемы с iowait, на что следует обратить внимание? В большинстве версий linux команда "iostat" дает гораздо лучшее представление о здоровье и производительности вашей дисковой системы. Если у вас нет команды "iostat", вам нужно установить пакет "sysstat".
В Ubuntu это часто делается командой:
1 | sudo apt-get install sysstat |
а в Centos это можно сделать командой
1 | sudo yum install sysstat |
Точной командой, которую я рекомендую, будет "iostat -mxy 10" - затем подождите 10 секунд. Каждые 10 секунд она будет выдавать среднее значение дисковой активности за этот 10-секундный период. Флаг "m" дает результаты в мегабайтах, "x" дает расширенные результаты, а флаг "y" опускает первый результат (который обычно является средним результатом с момента загрузки системы). "10" означает показывать результаты каждые 10 секунд.
1 | iostat -mxy 10 |
Из всего вышесказанного наиболее полезным значением, на которое следует обратить внимание, является %util - процент использования. Это процент времени, в течение которого диск активно обслуживает запросы. Если этот показатель постоянно очень высок, скажем, более 50% большую часть времени, то да, скорее всего, сервер работает медленно из-за чрезмерного обращения к диску.
Даже это значение может быть несколько обманчивым для NVMe SSD, которые могут обрабатывать множество одновременных подключений, но это определенно хорошая отправная точка, и оно очень подходит для обычных жестких дисков. Если %util постоянно ниже 30% большую часть времени, скорее всего, у вас нет проблем с дисковым вводом-выводом.
Если вы сомневаетесь, вы также можете посмотреть на r_await и w_await columsn - среднее количество времени в миллисекундах, которое ожидает запрос на чтение или запись на диск, прежде чем он будет обработан - чтобы понять, способен ли диск обрабатывать запросы своевременно. Значение менее 10 мс для SSD или 100 мс для жестких дисков обычно не вызывает беспокойства, а меньшее значение лучше.
Надеюсь, эта статья дала вам представление о том, стоит ли беспокоиться о дисковой производительности вашего сервера, поскольку она связана со статистикой iowait и util%.