Мониторинг диска и памяти в Linux: простые инструменты
Показываем, как за несколько минут отличить заполненный диск от медленного ввода-вывода, а нехватку памяти — от обычного файлового кеша. Команды подходят для первичной диагностики Linux-сервера.

Когда сайт тормозит или не может записать файл, одного показателя «свободно» мало: диск может быть заполнен по inode, накопитель — перегружен операциями ввода-вывода, а почти вся память — занята кешем, который Linux освободит при необходимости. Для первичной проверки хватит нескольких команд из procps-ng 4.x, GNU coreutils 9.x и sysstat 12.x. Примеры рассчитаны на Linux; точные версии утилит и доступные параметры зависят от дистрибутива.
Сначала выясните, что именно заканчивается
Начните с простых снимков состояния. Они отвечают на разные вопросы, поэтому не заменяют друг друга.
df -hT
df -i
free -hdf -hT показывает занятость файловых систем в удобных единицах и их тип. Если раздел почти заполнен, проблема в объёме данных. df -i показывает использование inode — записей, которыми файловая система учитывает файлы. Их может не хватить, даже когда свободные гигабайты ещё есть: такое бывает при огромном количестве мелких файлов.
free -h выводит сводку по памяти. В первую очередь смотрите на столбец available, а не только на free: ядро использует свободную память для кеширования и может освободить часть кеша, когда приложениям понадобится ресурс.
Заполненный диск, исчерпанные inode и медленный накопитель — три разные неисправности. Команда
dfобнаруживает первые две, но не измеряет задержки диска.
Найдите крупные каталоги, если заканчивается место
df говорит, на какой файловой системе проблема, но не показывает виновника. Для первого уровня каталогов используйте du:
sudo du -x --max-depth=1 -h /var | sort -hКлюч -x не даёт переходить на другие файловые системы, --max-depth=1 ограничивает вывод ближайшими подкаталогами, а sort -h сортирует размеры с суффиксами вроде M и G. Замените /var на каталог, который хотите проверить. Команда может занять время на большом дереве и потребовать прав на чтение.
Если в выводе выделяется, например, каталог журналов или временных файлов, сначала проверьте, кто его наполняет и можно ли безопасно удалить данные. Не удаляйте файлы работающего приложения наугад: процесс может продолжить занимать место, пока держит файл открытым. Если df показывает занятость, а сумма из du заметно меньше, проверьте удалённые, но всё ещё открытые файлы и особенности монтирования.
Отличите нехватку памяти от активного свопинга
Снимок free -h не показывает, меняется ли ситуация со временем. Для короткого наблюдения запустите:
vmstat 1 5Утилита выведет пять обновлений с интервалом в секунду. В колонках si и so отражены чтение из swap и запись в swap. Смотрите на повторяющиеся ненулевые значения вместе с низким available и замедлением приложений: единичная активность сама по себе ещё не доказывает, что памяти не хватает.
Первая строка статистики vmstat содержит усреднённые данные с момента загрузки системы, а не замер за одну секунду. Для оценки текущего состояния ориентируйтесь на следующие строки. Похожее правило действует для первого отчёта iostat.
В контейнере показатели хоста могут не совпадать с лимитом контейнера. Если проблема возникает только внутри контейнера, проверьте его ограничения памяти и события cgroup: на Linux с cgroup v2 это, в частности, файлы memory.max и memory.events в соответствующей иерархии. Путь и доступность зависят от конфигурации контейнерной среды.
Проверьте, не упирается ли система в скорость диска
Свободное место не показывает скорость ввода-вывода. Если команда есть в системе, снимите интервальные показатели:
iostat -xz 1 5iostat входит в пакет sysstat. В отчёте смотрите на задержку операций (await), очередь (aqu-sz) и загрузку устройства (%util). Высокие значения полезны только в контексте: у разных типов накопителей и рабочих нагрузок нормальная картина различается. Например, высокий процент занятости устройства не означает автоматически, что любой SSD достиг предела.
Первый отчёт может описывать средние значения с момента загрузки, а следующие — заданные интервалы. Не делайте вывод по одной строке: сопоставьте несколько замеров с моментом торможения и активностью приложения.
Какой инструмент выбрать
| Вопрос | Инструмент | Что показывает | Чего не показывает |
|---|---|---|---|
| Заканчиваются гигабайты или inode? | df -hT, df -i | Занятость файловых систем | Какой каталог занял место и насколько быстро работает диск |
| Какой каталог разросся? | du | Объём данных в дереве каталогов | Задержки устройства; без прав часть файлов может быть недоступна |
| Достаточно ли памяти прямо сейчас? | free -h | Сводку по памяти, включая доступную | Динамику и причину нагрузки |
| Есть ли признаки давления на память? | vmstat 1 5 | Изменения свопинга и другие показатели по интервалам | Какой именно процесс создаёт нагрузку |
| Задерживает ли накопитель запросы? | iostat -xz 1 5 | Очередь и задержки устройств во времени | Какой процесс отправляет операции ввода-вывода |
Когда какого замера достаточно
- Нужно быстро проверить раздел: начните с
df -hTиdf -i. Это короткий снимок, но он не объясняет, что занимает место. - Раздел заполнен: найдите крупные каталоги через
du. Цена — дополнительное чтение дерева файлов и возможные задержки на больших каталогах. - Сервис замедлился, но место есть: снимите
vmstatиiostatнесколько интервалов подряд. Так вы увидите динамику, но для поиска конкретного процесса нужны дополнительные средства наблюдения. - Проблема возникает периодически: настройте сбор истории, например средствами sysstat, и храните её достаточно долго, чтобы сопоставлять пики с инцидентами. Разовая команда, запущенная после сбоя, прошлую нагрузку не восстановит.
Что чаще всего вводит в заблуждение
- Мало в колонке
free. Проверьтеavailableи динамикуsi/so. Кеширование само по себе не равно аварийной нехватке памяти. dfиduпоказывают разные суммы. Уточните, совпадает ли файловая система, проверьте права и открытые удалённые файлы.du -xнамеренно не обходит другие файловые системы.- На диске много места, но приложение тормозит. Проверьте интервальные показатели
iostat; свободная ёмкость и скорость операций — не одно и то же. - В контейнере всё выглядит нормально, а процесс получает отказ. Сравните метрики контейнера с его лимитами: системный объём памяти хоста не равен доступному контейнеру ресурсу.
Термин. Inode — учётная запись файла или каталога в файловой системе. Она нужна для хранения метаданных; содержимое файла занимает отдельное место. Поэтому свободные гигабайты не гарантируют, что система сможет создать ещё один файл.
Что делать дальше
Сначала сохраните базовые замеры в момент нормальной работы: занятость разделов, доступную память и интервальные показатели устройств. При следующем замедлении снимите те же данные и сравните их с обычным уровнем. Если проблема повторяется, настройте сбор истории и оповещения по метрикам конкретного сервиса; универсальный порог для всех дисков, приложений и серверов здесь ненадёжен.
Логотип и фирменный стиль: Три концепции разного характера, палитра с обоснованием, проверка на читаемость в малом размере и в один цвет.
Спросить за 60 ₽Источники: Документация ядра Linux: файловая система /proc, Официальный репозиторий sysstat
Частые вопросы
Почему `free -h` показывает мало свободной памяти, хотя сервер работает нормально?
На диске свободны гигабайты, но файлы больше не создаются. Почему?
Почему сумма `du` меньше занятого места в `df`?
Эти команды подойдут для другой версии Linux или дистрибутива?
Можно ли понять по одному запуску `iostat`, что диск перегружен?
В контейнере память заканчивается, хотя на хосте её достаточно. Что проверить?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.