Высокое использование диска в Linux (Disk Saturation)
Что такое насыщение диска?
Насыщение диска (Disk Saturation) — это состояние, при котором накопитель не справляется с объёмом поступающих запросов на запись и чтение данных. В отличие от простой высокой загрузки, насыщение означает, что диск работает на пределе своих возможностей, и любые дополнительные операции вызывают задержки в очереди.
Показатель насыщения:
- До 50% — нормальная работа
- 50-80% — повышенная нагрузка
- 80-100% — критическое насыщение
Симптомы проблемы
При насыщении диска в Linux наблюдаются следующие признаки:
- Замедление системы — приложения долго запускаются и реагируют на действия пользователя
- Высокий iowait — процессор тратит много времени на ожидание операций ввода-вывода
- Зависание файловых операций — копирование, запись и чтение файлов происходят с задержками
- Проблемы с журналированием — записи в системные логи могут отставать
Диагностика насыщения диска
1. Использование iostat
Установите пакет sysstat и выполните:
iostat -x 1
Обратите внимание на следующие метрики:
| Параметр | Описание | Критическое значение |
|---|---|---|
| %util | Процент времени CPU, занятого обработкой I/O запросов | > 80% |
| r/s, w/s | Количество операций чтения/записи в секунду | Зависит от типа диска |
| r_await, w_await | Среднее время ожидания операций чтения/записи | > 20 мс |
2. Проверка iowait через top
top
В верхней строке отображается параметр wa (iowait):
%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 72.3 id, 18.4 wa, 0.0 hi, 2.0 si, 0.0 st
Если wa превышает 20-30%, это указывает на проблемы с диском.
3. Мониторинг процессов с iotop
sudo iotop
Эта команда показывает процессы, активно использующие диск:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 150.23 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
1247 be/4 root 0.00 B/s 150.23 M/s 0.00 % 0.00 % dd if=/dev/zero of=/test
4. Анализ с помощью vmstat
vmstat 1
Ключевые колонки:
- si (swap in) — данные, загруженные из swap
- so (swap out) — данные, выгруженные в swap
- wa — iowait
Типичные причины насыщения
1. Интенсивная запись логов
# Проверка размера директории логов
du -sh /var/log/*
# Мониторинг активности записи
sudo lsof | grep -E "REG|/var/log"
2. Работа с большими базами данных
Базы данных PostgreSQL, MySQL, MongoDB активно используют диск при:
- Выполнении тяжёлых запросов
- Проведении операций VACUUM/индексации
- Записи транзакционных логов
3. Недостаток оперативной памяти
При нехватке RAM система активно использует swap:
# Проверка использования swap
swapon --show
free -h
4. Фрагментация файловой системы
# Проверка фрагментации (для ext4)
sudo fsck -n /dev/sda1
Способы устранения проблемы
Краткосрочные решения
- Остановка ресурсоёмких процессов
# Найдите процессы с высоким I/O ps aux | awk '$8 ~ /D/ {print $0}' # D — состояние uninterruptible sleep (обычно ожидание I/O) - Очистка временных файлов
# Очистка кэша пакетов sudo apt clean # Очистка старых логов sudo journalctl --vacuum-time=7d - Очистка swap (если много свободной памяти)
sudo swapoff -a && sudo swapon -a
Долгосрочные решения
- Переход на SSD
Замена HDD на SSD значительно повышает производительность I/O:# Проверка типа диска lsblk -d -o NAME,TYPE,ROTA # ROTA=1 — HDD, ROTA=0 — SSD - Настройка I/O Scheduler
Для SSD рекомендуется использоватьnoneилиmq-deadline:# Просмотр текущего планировщика cat /sys/block/sda/queue/scheduler # Установка планировщика echo "mq-deadline" | sudo tee /sys/block/sda/queue/scheduler - Оптимизация приложений
- Настройте буферизацию и кэширование в приложениях
- Используйте асинхронные операции записи
- Разнесите операции чтения и записи по времени
- Мониторинг и алертинг
Настройте систему мониторинга (Prometheus, Zabbix, Nagios) для отслеживания:- Процента использования диска (%util)
- Времени ожидания I/O (await)
- Значения iowait
Профилактика
- Регулярно очищайте логи и временные файлы
- Следите за свободным местом на диске
- Настройте ротацию логов
- Используйте мониторинг для раннего обнаружения проблем
- Планируйте ёмкость хранилища с запасом 20-30%
Заключение
Насыщение диска — серьёзная проблема, влияющая на производительность всей системы. Своевременная диагностика с помощью iostat, iotop и vmstat позволяет быстро определить причину высокой нагрузки. Комплексный подход, включающий как немедленные меры, так и долгосрочную оптимизацию (переход на SSD, настройка планировщика, оптимизация приложений), поможет решить проблему и предотвратить её повторное возникновение.