Перейти к основному содержимому
Вернуться в категорию

Обнаружение и устранение медленного дискового ввода-вывода

Обнаружение и устранение проблем с медленным дисковым I/O на Linux-серверах с помощью iotop, iostat и методов оптимизации.

Время чтения: 14 мин Устранение неполадок
дискI/Oiotopiostatпроизводительностьlinuxхранилище

Содержание

Введение

Медленный дисковый I/O — распространённая проблема, серьёзно влияющая на производительность сервера. Запросы к базе данных замедляются, веб-приложения перестают отвечать, система в целом работает медленно. В этом руководстве рассмотрим, как обнаружить и устранить медленный дисковый I/O.

Симптомы

Типичные признаки медленного дискового I/O:

  • Команды зависают надолго (особенно ls, find, чтение/запись файлов)
  • Запросы к базе данных намного медленнее обычного
  • Высокое значение wa (ожидание I/O) в top или htop
  • Ошибки тайм-аута в журналах приложений

Шаг 1: Проверка ожидания I/O

hljs bash
# Проверка ожидания I/O с помощью top
top
# Смотрите столбец 'wa' — выше 5% указывает на проблему

# Мгновенный статус I/O с vmstat
vmstat 1 10

# Статистика диска с iostat
iostat -x 1 5
# %util выше 80% означает насыщение диска

Шаг 2: Какой процесс использует диск?

hljs bash
# Мониторинг дискового I/O в реальном времени с iotop
sudo apt install iotop -y
sudo iotop -o

# I/O по процессам с pidstat
sudo apt install sysstat -y
pidstat -d 1 5

Шаг 3: Тест производительности диска

hljs bash
# Простой тест записи
dd if=/dev/zero of=/tmp/test_write bs=1M count=1024 oflag=direct

# Комплексный тест с fio
sudo apt install fio -y
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread \
    --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 \
    --group_reporting --filename=/tmp/fio_test

rm /tmp/fio_test /tmp/test_write

Шаг 4: Проверка состояния диска

hljs bash
# Статус SMART
sudo apt install smartmontools -y
sudo smartctl -a /dev/sda

# Ошибки диска
dmesg | grep -i -E '(error|fail|bad|ata|scsi|disk)'

Если Reallocated_Sector_Ct или Pending_Sector_Count больше 0, диск выходит из строя. Немедленно создайте резервную копию.

Шаг 5: Оптимизация файловой системы

hljs bash
# Использование диска
df -h

# Очистка журналов
sudo journalctl --vacuum-size=500M

# Добавить noatime в /etc/fstab
# UUID=xxx / ext4 defaults,noatime 0 1

# Планировщик I/O для SSD
echo 'none' | sudo tee /sys/block/sda/queue/scheduler

Шаг 6: Использование tmpfs для снижения I/O

hljs bash
# tmpfs для /tmp
echo 'tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=2G 0 0' | sudo tee -a /etc/fstab
sudo mount -a

Заключение

Для устранения медленного дискового I/O сначала определите с помощью iotop и iostat, какой процесс нагружает диск, затем проверьте состояние диска с помощью SMART. Оптимизация файловой системы (noatime, планировщик I/O) и использование tmpfs могут значительно улучшить производительность. При физических неисправностях диска немедленно создайте резервную копию и обратитесь в поддержку REXE.