- Home »

vmstat: практическое руководство по памяти и CPU
Если ты когда-нибудь держал в руках сервер (или, по крайней мере, ssh-подключение к нему), то точно знаешь: мир системных утилит огромен, но есть несколько настоящих “классиков”. vmstat — именно такой инструмент. Вроде бы старенький, но до сих пор незаменимый для диагностики проблем с памятью и CPU. Почему? Потому что он быстрый, информативный и, главное, всегда под рукой на любой уважающей себя Linux-машине. В этой статье разберёмся, чем vmstat может быть полезен в реальной жизни, как его правильно читать, какие ошибки допускают новички, и как выжать из него максимум пользы. Будет много примеров, лайфхаков и даже немного магии автоматизации.
О чём эта статья и почему это важно
Всё просто: если ты хочешь, чтобы твой сервер (будь то VPS, облако или выделенный зверь) не тормозил в самый неподходящий момент, нужно следить за его состоянием. vmstat — твой верный друг для анализа того, что происходит с памятью и процессором прямо сейчас (или за определённый период). Эта статья — не очередная “теория ради теории”, а практическое руководство: как vmstat устроен, как его запустить и понять, что он показывает, как не попасться на типичные грабли и, главное, как применять его для реального мониторинга и диагностики.
Почему vmstat — это must-have для любого, кто настраивает серверы
- Уже есть почти везде (не нужно ставить 100500 зависимостей)
- Даёт мгновенный срез по памяти, CPU, IO и свопу
- Лёгкий, не грузит систему
- Можно запускать хоть в кроне, хоть в скриптах, хоть руками
- Понимание его вывода — основа для любой дальнейшей диагностики
Как работает vmstat: что под капотом и зачем это знать
В двух словах: vmstat (Virtual Memory Statistics) собирает статистику из ядра Linux через специальные интерфейсы (/proc/meminfo
, /proc/stat
, /proc/vmstat
и др.), агрегирует её и выдаёт на экран в виде таблички. Но не только про память! Он показывает ещё и CPU, IO, своп, процессы и прочие штуки, которые реально важны для диагностики.
Алгоритм работы
- Читает данные из ядра (обычно из
/proc
) - Агрегирует их по категориям: процессы, память, своп, IO, система, CPU
- Выводит срез (или дельту, если запущен с интервалом)
Главное: vmstat не показывает “историю”, а только текущий момент или дельты между измерениями. Это не мониторинг с графиками, а инструмент для быстрой диагностики “здесь и сейчас”.
Структура вывода
Типичный вывод vmstat
выглядит примерно так:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 123456 7890 654321 0 0 1 2 10 20 5 1 94 0 0
Что это значит? Расшифровка — ниже.
Группа | Поля | Что показывает |
---|---|---|
procs | r, b | r — процессы в run queue (готовы к выполнению), b — процессы в uninterruptible sleep (обычно ждут IO) |
memory | swpd, free, buff, cache | swpd — объём свопа, free — свободная RAM, buff — буферы, cache — кэш |
swap | si, so | si — swap in (из swap в RAM), so — swap out (из RAM в swap) |
io | bi, bo | bi — блоки, считанные с устройств, bo — записанные на устройства |
system | in, cs | in — прерывания, cs — переключения контекста |
cpu | us, sy, id, wa, st | us — user time, sy — system time, id — idle, wa — ожидание IO, st — stolen (украдено гипервизором) |
Как быстро и просто всё настроить: практические советы
Установка и запуск
На большинстве дистрибутивов Linux vmstat уже есть (часть пакета procps
или procps-ng
). Проверить:
which vmstat
Если не установлен, ставим:
- Debian/Ubuntu:
sudo apt install procps
- CentOS/RHEL:
sudo yum install procps-ng
- Alpine:
apk add procps
Базовые команды
Запустить и посмотреть разово:
vmstat
Потоковое обновление каждые 2 секунды (Ctrl+C для выхода):
vmstat 2
Показать 5 раз с интервалом 1 секунда:
vmstat 1 5
Показать в мегабайтах (с версии procps-ng 3.3.10+):
vmstat -S M 1 5
Практические схемы использования
- Запусти
vmstat 1
и открой вторым окном top/htop — увидишь, как оба инструмента дополняют друг друга. - В crontab можно добавить логирование:
* * * * * vmstat 1 5 >> /var/log/vmstat.log
- Для быстрой диагностики “тормозит сервер” — сразу смотри на r (run queue) и wa (wait IO).
- Если si и so не нули — у тебя свопится память, пора что-то делать.
Реальные кейсы: что показывает vmstat и как это использовать
Ситуация | Что видно в vmstat | Рекомендации |
---|---|---|
Всё тормозит, CPU 100% | r > кол-ва ядер, us+sy > 90%, id ≈ 0% | Смотри, кто грузит CPU (ps/top), оптимизируй софт, увеличь ядра |
Сервер зависает при нагрузке на диск | wa > 30-40%, r растёт, bi/bo большие | Проверь диск (iostat, smartctl), смени на SSD, оптимизируй IO |
Своп активно используется | si/so > 0, swpd растёт | Добавь RAM, настрой swappiness, найди утечки памяти |
Система простаивает | id > 90%, все остальное маленькое | Всё хорошо! Можно уменьшить ресурсы (экономия) |
Виртуалка “тормозит” без нагрузки | st > 0% | Гипервизор “ворует” CPU, проверь настройки VPS/облака |
Ошибки новичков и мифы
- “Свободная память (free) — это всё, что можно использовать”. На самом деле, Linux активно использует память под кэш и буферы, поэтому смотреть надо на сумму free+buffers+cache.
- “Если swpd не ноль — всё плохо”. Не всегда! Если si/so = 0, а swpd просто не ноль — своп был, но сейчас не используется.
- “wa (wait IO) — это всегда проблема с диском”. Нет, иногда это может быть сеть или даже NFS.
- “vmstat — устаревший, есть же atop/glances”. vmstat — прост, быстр и всегда под рукой. atop/glances отлично для комплексного мониторинга, но для быстрой диагностики vmstat незаменим.
Похожие утилиты и сравнение
Утилита | Что даёт | Когда использовать |
---|---|---|
top/htop | Процессы, загрузка CPU/RAM, интерактивно | Когда нужно “кто жрёт ресурсы” |
iostat | Подробная статистика по дискам/IO | Для анализа “тормозит диск” |
free | Суммарная память (просто, но мало) | Быстро посмотреть общий объём |
glances | Интерактивный мониторинг, всё в одном | Для комплексного мониторинга |
atop | Логирование и детализация по процессам | Когда нужна история и детализация |
vmstat — это “швейцарский нож” для быстрого анализа, остальные — для детализации и долгосрочного мониторинга.
Интересные факты и нестандартные способы использования
- Можно использовать vmstat для мониторинга в Docker-контейнерах (если есть доступ к /proc).
- В скриптах можно парсить вывод vmstat и отправлять алерты в Telegram/Slack при превышении порогов.
- Некоторые облачные панели (например, Cockpit) используют данные vmstat для своих графиков.
- vmstat отлично работает даже на старых системах (например, CentOS 6, Debian 7 и др.).
- Можно мониторить не только серверы, но и, например, Raspberry Pi, роутеры (если есть Linux).
Автоматизация и интеграция
vmstat отлично вписывается в автоматизацию:
- Логирование в cron и анализ логов (grep, awk, python)
- Интеграция с Prometheus (через node_exporter)
- Мониторинг в Ansible-плейбуках (модуль shell)
- Быстрые healthchecks в CI/CD пайплайнах
Пример простого bash-скрипта для алерта по свопу
#!/bin/bash
SWAP_THRESHOLD=100 # Мегабайт
SWAP_USED=$(vmstat -S M | awk 'NR==3 {print $3}')
if [ "$SWAP_USED" -gt "$SWAP_THRESHOLD" ]; then
echo "ALERT: Swap usage is high ($SWAP_USED MB)" | mail -s "Swap Alert" admin@example.com
fi
Новые возможности и фишки (современный vmstat)
- Флаг
-S
для вывода в мегабайтах/килобайтах (меньше математики для глаз) - Параметр
-d
— подробная статистика по дискам - Параметр
-s
— сводка по памяти/системе
Примеры:
vmstat -d
vmstat -s
Заключение и рекомендации
vmstat — это инструмент, который обязан знать любой, кто хоть раз настраивал или обслуживал сервер. Он не заменяет комплексные системы мониторинга, но даёт мгновенный и честный срез по состоянию памяти, CPU, IO и свопа. Его плюсы — простота, скорость, доступность и возможность автоматизации. Если у тебя VPS, облако, выделенный сервер или даже домашний сервер — vmstat всегда поможет быстро понять, что происходит “под капотом”.
- Используй vmstat для быстрой диагностики и автоматизации healthcheck-скриптов.
- Не забывай про остальные утилиты (top, iostat, glances) — они дополняют друг друга.
- Если видишь проблемы с памятью или CPU — vmstat поможет локализовать их за минуты.
- Запускай его с интервалом, анализируй дельты, логируй — и твой сервер будет жить дольше и стабильнее.
Официальная документация: https://man7.org/linux/man-pages/man8/vmstat.8.html
Пусть твои сервера никогда не тормозят — vmstat всегда на страже!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.