Производительность жесткого диска часто является узким местом при диагностике причин медленной работы сервера. Возможно, программа выполняет много записей, или многочисленные обращения к подкачке приводят к снижению производительности. Независимо от причины, iotop является важным инструментом для определения того, что чрезмерный доступ к диску снижает ресурсы сервера. В этом руководстве мы установим iotop в CentOS и познакомимся с его использованием, чтобы вы знали, как проводить тестирование производственных серверов.
Начало работы
Чтобы выполнить это руководство, вам понадобится следующее:
- 1 узел (облачный сервер или выделенный сервер) под управлением чистой CentOS.
- Root-доступ к серверу.
Хотя это будет работать на рабочем сервере, рекомендуется ознакомиться с iotop на экземпляре, который не является критическим для ваших операций, прежде чем использовать эти знания на живой системе.
Руководство
Давайте начнем. Пакет iotop включен в официальные репозитории пакетов CentOS, поэтому нам нужно только установить его.
1 | sudo yum -y install iotop |
Теперь запустим только что установленную команду iotop, после чего мы получим регулярно обновляемую статистику использования дисков.
1 | iotop |
На данный момент результаты iotop не слишком интересны. Если вы следовали рекомендациям этого руководства, вы установили его на сервер, который в основном простаивает.
Если приложение выполняет много операций чтения или записи на диск, вы заметите его в верхней части списка. Вы можете использовать значение процента IO для определения доступа программы к диску по отношению к общей пропускной способности диска. Если программа ведет себя плохо, возможно, есть настройки конфигурации, которые можно сделать, чтобы уменьшить ее использование диска, возможно, заставив ее больше полагаться на оперативную память.
Колонка SwapIn позволяет определить, насколько сильно данный процесс использует своп. Это может быть признаком того, что использование памяти процессом должно быть каким-то образом уменьшено. Хотя процесс все равно будет записывать данные на диск, позволить ему сохранять память с помощью собственных механизмов, скорее всего, будет быстрее, чем заставлять его обращаться к памяти в режиме подкачки и обратно.
Если текущее отображение iotop слишком грубое, есть способы запустить его для отображения более точных деталей. Например, возможно, вам нужны только глобальные данные об использовании диска. Это можно сделать с помощью следующей команды:
1 | iotop -btoqq --iter=1 |
Пример
1 2 | 17:53:54 Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s 17:53:54 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s |
Вы также можете запустить iotop с несколькими итерациями. Это позволит вам получить больше снимков использования диска, что даст более точное представление о том, как используется пропускная способность диска.
1 | iotop -btoqq --iter=5 |
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 17:55:00 Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s 17:55:00 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s 17:55:01 Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s 17:55:01 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s 17:55:02 Total DISK READ : 0.00 B/s | Total DISK WRITE : 98.57 K/s 17:55:02 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 220.79 K/s 17:55:02 142 be/3 root 0.00 B/s 55.20 K/s 0.00 % 0.20 % [jbd2/sda3-8] 17:55:02 21522 be/4 postfix 0.00 B/s 3.94 K/s 0.00 % 0.06 % cleanup -z -t unix -u -c 17:55:02 23849 be/4 postfix 0.00 B/s 0.00 B/s 0.00 % 0.00 % local -t unix 17:55:02 31183 be/4 mysql 0.00 B/s 11.83 K/s 0.00 % 0.00 % mysqld 17:55:02 470 be/4 syslog 0.00 B/s 19.71 K/s 0.00 % 0.00 % rsyslogd [rs:main Q:Reg] 17:55:03 Total DISK READ : 0.00 B/s | Total DISK WRITE : 772.34 K/s 17:55:03 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 985.80 K/s 17:55:03 12082 be/4 nagios 0.00 B/s 461.85 K/s 0.00 % 0.20 % nagios -d /usr/local/nagios/etc/nagios.cfg 17:55:03 142 be/3 root 0.00 B/s 252.27 K/s 0.00 % 0.05 % [jbd2/sda3-8] 17:55:03 31215 be/4 mysql 0.00 B/s 58.22 K/s 0.00 % 0.00 % mysqld |
Вы также можете заставить iotop сообщать о приложении только в том случае, если оно использует чрезмерное количество ресурсов. Это позволяет отфильтровать приложения, которые, скорее всего, не вызывают проблем. Если приложение начинает использовать большое количество ресурсов, оно появится в результатах iotop.
Аналогично, вы можете заставить iotop выводить только те приложения, которые в данный момент потребляют пропускную способность диска. Эта команда берет пять образцов использования диска, отображая только основные приложения, которые используют диск.
1 | iotop -botqq --iter=5 |
Пример
1 2 3 4 5 | 17:59:50 24333 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.48 % [kworker/u4:2] 17:59:51 12082 be/4 nagios 0.00 B/s 3.91 K/s 0.00 % 0.00 % nagios -d /usr/local/nagios/etc/nagios.cfg 17:59:52 142 be/3 root 0.00 B/s 66.50 K/s 0.00 % 0.31 % [jbd2/sda3-8] 17:59:52 12082 be/4 nagios 0.00 B/s 465.48 K/s 0.00 % 0.16 % nagios -d /usr/local/nagios/etc/nagios.cfg 17:59:52 5604 be/4 postfix 0.00 B/s 3.91 K/s 0.00 % 0.00 % tlsmgr -l -t unix -u -c |
Если вы знаете, что ваш сервер интенсивно использует диск, но не можете постоянно следить за iotop, его можно использовать для вывода журнала использования диска в фоновом режиме. Этот журнал может быть проверен позже для выявления проблемных приложений. Эта команда будет записывать в журнал данные iotop для последующего анализа:
1 | crontab -e |
При редактировании crontab добавьте следующую строку. Отредактируйте строку в соответствии с вашими потребностями. В этом примере регистрируются только определенные приложения для последующего анализа.
1 | * * * * * * root iotop -botqq --iter=3 >> /var/log/iotop |
Сохраните этот файл и подождите минуту, пока он запустится. Вы увидите журналы в /var/log/iotop.
Заключение
Iotop - это сложный инструмент с множеством возможных применений, но он неоценим в определении того, является ли доступ к диску причиной проблем с производительностью вашего сервера. Вышеизложенное поможет вам выявить отдельные проблемы, а также настроить долгосрочный мониторинг производительности для выявления периодических всплесков использования диска, которые могут помешать работе вашего сервера. Если это руководство было полезным для вас, поделитесь им с другими, кому оно может быть интересно.