wiki-js/sysadmin/Linux/analize-and-test/analize-disk.md

55 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Анализ дисковой активности в Linux
description:
published: true
date: 2023-11-15T17:57:30.267Z
tags:
editor: markdown
dateCreated: 2023-11-15T17:57:25.992Z
---
Расскажу кратко, с помощью каких консольных инструментов можно всесторонне рассмотреть дисковую активность на сервере под управлением Linux.
Начнём издалека и посмотрим общую дисковую активность отдельного устройства. Для этого можно воспользоваться утилитой btrace из пакета blktrace (есть в стандартных репах)
`btrace -w 60 -a write /dev/mapper/rhel-root`
В течении 60 секунд утилита будет анализировать дисковую активность процессов и потоков ядра. В завершении покажет сводную статистику.
Наглядный вывод статистики по дисковым устройствам в режиме реального времени есть у iostat из пакета sysstat (есть в репозиториях). Я предпочитаю вот такое отображение с использованием watch:
`watch -n 1 iostat -xk`
Более детально в режиме реального времени нагрузку на диск отдельных приложений можно посмотреть с помощью iotop (есть в репозиториях). Простой запуск без параметров похож на обычный top, только про диски. Более наглядную информацию можно получить, запустив iotop с ключами:
`iotop -obPat`
Ещё один вариант отображения активности процессов в режиме реального времени - pidstat. Она тоже из пакета sysstat. Запускаем с обновлением раз в секунду:
`pidstat -d 1`
Видим активность всех процессов. Можем конкретизировать, указав один из них по его pid:
`pidstat -p PID -d 1`
Двигаемся дальше и смотрим, в какие файлы производится запись с помощью fatrace (в deb дистрибутивах есть в репозиториях). Проверка очень простая и быстрая через анализ обращений к inotify.
`fatrace -f W`
Можно записать всю файловую активность в лог файл и потом спокойно посмотреть:
`fatrace -t -s 60 -o ~/fatrace.log`
Более детально разобраться с тем, что пишет процесс на диск можно с помощью strace, указав ему в качестве параметра PID процесса:
`strace -e trace=write -p PID`
Напомню, что PID процесса или процессов можно узнать, например, вот так:
`pgrep mariadb`
или так:
`ps ax | grep mariadb`
Смотрим список открытых файлов в конкретной директории с помощью lsof:
`lsof +D /var/log`
Приведённых стандартных инструментов достаточно, чтобы провести основной анализ. Я перечислю ещё несколько удобных инструментов, но их скорее всего придётся ставить вручную, минуя пакетный менеджер, что не очень удобно.
◽️ утилита iosnoop из пакета perf-tools (https://github.com/brendangregg/perf-tools), показывает много полезной информации, в том числе latency, чего не делают перечисленные выше утилиты
◽️ утилита biosnoop из пакета BPF Tools (https://github.com/iovisor/bcc), показывает активность процессов, в том числе используемые сектора дисков и latency, в этом же пакете к дискам имеют отношения утилиты: biolatency, biotop, bitesize, ext4slower и подобные для других файловых систем.