- Как отследить, какой процесс создаёт нагрузку на диск
- iotop — аналог top для отслеживания нагрузки на диск в реальном времени
- pidstat — вывод статистики для задач Linux
- iostat — статистика использования устройств и разделов дисков
- Связанные статьи:
- Закончилось место на сервере Linux. Как узнать, чем занято?
- Как узнать в linux, сколько осталось свободного места
- Как узнать, чем занято место на сервере
- Очистка linux системы с помощью утилиты apt
- Освобождение места с помощью утилиты yum
- Детальное исследование занятого места на дисках в Linux
Как отследить, какой процесс создаёт нагрузку на диск
Чрезмерная нагрузка на диск может быть вызвана такой причиной как заражение вирусом либо неправильная настройка программ. В любом случае, необходимо начать с идентификации процесса (программы), которая больше всего делает операций чтения и записи на диск.
iotop — аналог top для отслеживания нагрузки на диск в реальном времени
Программа top позволяет увидеть, какие процессы потребляют больше всего процессорного времени и оперативной памяти, но ничего не говорит об использовании процессами диска, об операциях чтения и записи на диск.
Программа iotop показывает скорость чтения и записи на диск, также процент использования файла подкачки каждым процессом.
Для установки iotop в Debian, Linux Mint, Kali Linux, Ubuntu и их производные выполните команду:
Для установки iotop в Arch Linux, BlackArch, Manjaro и их производные выполните команду:
Программа требует повышенных привилегий для запуска:
В выводе программы присутствуют следующие столбцы:
- TID — идентификатор процесс
- PRIO — приоритет процесса
- USER — пользователь, который является владельцем процесса
- DISK READ — скорость чтения диска
- DISK WRITE — скорость записи на диск
- SWAPIN — процент использования файла подкачки
- IO> — процент от всех операций ввода-вывода
- COMMAND — запустившая процесс команда
С помощью курсорных клавиш вправо (→) и влево (←) вы можете переключаться между столбцами, одновременно выбирая, по какому из них будет выполнятся сортировка.
С помощью кнопок «Home» и «End» вы можете переключаться между крайними столбцами.
Нажатие любой клавиши обновит окно.
Для выхода нажмите «q».
Нажав клавишу «o» вы переключитесь на показ только активных процессов, то есть только процессов, которые записывают и считывают данные с постоянного хранилища. Такой же результат вы можете получить запустив программу с опцией -o:
Повторное нажатие клавиши «o» вернёт показ всех процессов.
По умолчанию используется сортировка по убыванию, с помощью кнопки «r» вы можете переключаться между сортировкой по убыванию и по возрастанию.
Кнопка «p» переключает между показами процессов и потоков.
По умолчанию показываются скорости чтения и записи, с помощью кнопки «a» вы можете переключиться на показ общего количества записанных и прочитанных данных.
У iotop имеется несколько опций, которые позволяют управлять поведением программы, например следующая команда будет работать в пакетном режиме (-b), показывая общее количество записанных и прочитанных данных (-a) только для активных процессов (-o), к выводимым данным будет добавляться метка времени (-t), из всех процессов будет отфильтрована только информация о systemd-journald (grep ‘systemd-journald’):
iotop -b -a -o -t | grep 'systemd-journald'
pidstat — вывод статистики для задач Linux
Пакет sysstat содержит сразу две утилиты с помощью которых можно собрать статистику использования диска процессами:
Для установки pidstat в Debian, Linux Mint, Kali Linux, Ubuntu и их производные выполните команду:
Для установки pidstat в Arch Linux, BlackArch, Manjaro и их производные выполните команду:
Следующая команда будет выводить накопленную статистику за каждые 20 секунд, будут показаны только активные процессы (сделавшие операции чтения и записи на диск за указанный интервал), также будет показана полная команда, запустившая процесс. Для более полной статистики запустите программу с повышенными привилегиями:
Каждая строка будет иметь следующие столбцы:
- Метка времени
- UID — числовой идентификатор пользователя
- PID — идентификатор процесса
- kB_rd/s — количество килобайт в секунду которые были прочитаны по инициативе указанной задачи
- kB_wr/s — количество килобайт в секунду которые были (или должны были быть) записаны по инициативе указанной задачи
- kB_ccwr/s — количество килобайт, запись которых на диск была отменена задачей. Это может произойти, когда задача усекает грязный кэш страниц. В этом случае некоторые операции ввода-вывода, для которых была учтена другая задача, не будут выполняться
- iodelay — задержка ввода-вывода
- Command — команда, запустившая задачу
iostat — статистика использования устройств и разделов дисков
Утилита iostat также включена в пакет sysstat. Как можно догадаться из названия программы, она создаёт отчёты по статистике ввода/вывода для устройств и разделов. Её особенностью является то, что она показывает обобщённую статистику для всей системы, а также для отдельных носителей, не разбивая её на процессы. Программа iostat может пригодиться когда необходимо ответить на вопрос: «какой из постоянных носителей подвергается наибольшей нагрузке?».
Запуск программы без опций
выведет два блока информации:
Раздел со статистикой использований устройств содержит следующие разделы:
- Device — имя устройства или раздела, как оно указано в /dev
- tps — указывает количество передач в секунду, отправленных на устройство. Передача — это запрос ввода-вывода к устройству. Несколько логических запросов можно объединить в один запрос ввода-вывода к устройству. Размер перевода является неопределённой величиной
- kB_read/s — указывает объём данных, считанных с устройства, выраженный в количестве блоков (килобайт, мегабайт) в секунду. Блоки эквивалентны секторам и поэтому имеют размер 512 байт
- kB_wrtn/s — указывает объём данных, записываемых на устройство, выраженный в количестве блоков (килобайт, мегабайт) в секунду
- kB_dscd/s — указывает количество данных, отбрасываемых устройством, выраженное в количестве блоков (килобайт, мегабайт) в секунду
- kB_read — общее количество прочитанных блоков (килобайт, мегабайт)
- kB_wrtn — общее количество записанных блоков (килобайт, мегабайт)
- kB_dscd — общее количество отброшенных блоков (килобайт, мегабайт)
Отчёт выводит для всей системы с момента её загрузки.
Поскольку по умолчанию данные выводятся в килобайтах, а современные объёмы информации, записываемой на диск, обычно кратны гигабайтом, что цифры трудны для восприятия. Для вывода чисел в удобных для восприятия единицах используйте опцию -h:
Опция -h является эквивалентом указания сразу двух опций —human и —pretty, поэтому если вы не в полной мере довольны видом выводимого отчёта, то попробуйте использовать эти опции по отдельности.
Для вывода максимальной полной информации, укажите опцию -x:
Если вам нужна информация только об устройствах, то используйте опцию -d:
Вы можете запустить команду указав время интервала (в секундах) и счётчик (количество отчётов) — в этом случае программа будет выводить информацию через заданный интервал:
iostat ИНТЕРВАЛ iostat ИНТЕРВАЛ СЧЁТЧИК
Первый отчёт будет содержать информацию с момента загрузки системы, а последующие отчёты будут содержать информацию за период, прошедший с предыдущего отчёта.
Для поиска проблем, вы можете использовать следующую команду, которая непрерывно будет выводить информацию:
С помощью iostat вы можете следить за скоростью чтения и записи на всё устройство, а также выявлять отброшенные блоки.
Связанные статьи:
Закончилось место на сервере Linux. Как узнать, чем занято?
Начинающие мастера часто сталкиваются с проблемой, когда заканчивается свободное место на хостинге или VPS с Linux. При этом объёмных работ по наполнению сайтов, работающих на сервере, не производилось. У моего коллеги был случай, когда из-за нехватки места не могли создастся файлы сессий на сайте. Давайте разберёмся, как это предотвратить на реальном примере.
Как узнать в linux, сколько осталось свободного места
Для того, чтобы узнать сколько место осталось на сервере, выполните команду:
Данная команда отобразит информацию о свободном пространстве на жёстком диске в гигабайтах. Кроме того, программа вычисляет процент занятого пространства, чтоб облегчить восприятие. Если занято более 90% — уже стоит беспокоиться.
Печальная картина — sda1 у нас занят 21 ГБ из 24. Место скоро закончится, но лучше это предотвратить.
Как узнать, чем занято место на сервере
Часто, причинами разрастания объёмов данных на сервер являются файлы логов. Например, из-за какой-нибудь
ошибки в скрипте сайта при каждом его выполнении ошибки пишется в лог.
Поищем 10 самых больших файлов на сервере, выполнив команду:
find / -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk ''
Нашли самые объёмные файлы
Видим, что самый большой файл лежит в папке mysql и имеет расширение MYD. Его трогать нельзя, так как в этом файлы хранятся данные для базы данных MySQL. Это относится и к файлам ipdata1 и ib_logfile*.
В файле selogs.txt хранилась информация о ботах поисковых систем, приходящих на сайт. Такие файлы можно безболезненно удалять, выполнив команду:
rm /var/www/****/protected/logs/selogs.txt
Файлы логов btmp.* содержат в себе информацию о неудачных попытках входа в систему. Возможно вас пытаются взломать, подобрав пароль методом bruteforce. Чтобы себя обезопасить, рекомендую настроить авторизация по ssh ключу. Изучив содержимое этих файлов (при необходимости), их тоже можно удалить.
Очистка linux системы с помощью утилиты apt
Если у вас дистрибутив семейства Debian, можете удалить ненужные пакеты и кэш с помощью утилиты apt.
Перед установкой какого-либо пакета через apt-get, он кэшируется в локальный репозиторий. Объём сохранённых deb пакетов может достигать внушительных размеров. Команда команда apt-get clean удалит все закэшированные deb пакеты и освободит обширное пространство на диске.
При установке программы, вмести с ней в linux устанавливаются дополнительные пакеты, которые использует эта программа. Если программа была удалена, то её зависимости автоматически не удаляются. Данная команда и предназначена для удаления этих пакетов. Но если доля зависимостей ваших программ может быть невелико, то размер зависимостей устаревших версий ядра операционной системы linux может быть огромным. Выполните эту команду и увидите эффект.
Освобождение места с помощью утилиты yum
В семействе дистрибутивов RedHat аналогичные операции можно произвести с помощью следующих команд:
yum clean packages yum autoremove
Детальное исследование занятого места на дисках в Linux
Для детального исследования занятого пространства в linux рекомендую использовать утилиту ncdu. Установить ее можно командой:
Если у вас yum, вместо apt-get, то:
После установки перейдите в любую папку и выполните в консоли команду:
Вот пример с результатом работы данной программы для папки, где лежат файлы моего блога.
Таким образом, можно искать папки, занимающие большие объёмы дискового пространства.