Как понять, как приложение взаимодействует с диском в Linux

«Как понять, как приложение взаимодействует с диском в Linux» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для анализа дисковых операций приложения в Linux я использую комбинацию инструментов мониторинга и трассировки. Это критически важно для диагностики проблем с производительностью (высокий IOwait) или утечек файловых дескрипторов.

1. Трассировка системных вызовов в реальном времени strace показывает все системные вызовы, связанные с файлами и диском.

# Отслеживать все файловые операции для запускаемой команды
strace -e trace=file,openat,read,write,close <command>
# Присоединиться к уже работающему процессу
strace -p <PID> -e trace=file
# Сохранить вывод в файл для анализа
strace -o trace.log -p <PID>

2. Мониторинг открытых файлов и дескрипторов lsof показывает, какие именно файлы использует процесс.

# Все открытые файлы для процесса
lsof -p <PID>
# Показать только регулярные файлы и сокеты
lsof -p <PID> | grep -E "REG|unix"
# Найти процессы, держащие открытым конкретный файл
lsof /path/to/file.log

3. Мониторинг нагрузки на диск в реальном времени

# Показать процессы, активно ведущие запись/чтение (обновление каждые 2 сек)
sudo iotop -o -d 2
# Статистика по устройствам блочного уровня
sudo iostat -dx 2

4. Анализ через виртуальную файловую систему /proc В /proc/<PID>/io содержится детальная статистика ввода-вывода для процесса (прочитано/записано байт).

cat /proc/<PID>/io

Типичный сценарий: Если приложение «подвисает», я сначала смотрю iotop, чтобы идентифицировать процесс, создающий высокую нагрузку, затем strace или lsof, чтобы понять, с какими файлами он работает.