Linux

Мониторинг использования памяти в Linux: подробное руководство

В этом гайде вы освоите практические методы мониторинга оперативной памяти в Linux: от базовых команд `free` и `top` до продвинутых утилит `nmon` и `glances`. Вы научитесь интерпретировать показатели и настроить автоматический сбор статистики.

Обновлено 14 февраля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+CentOS 7+Debian 10+Fedora 35+Арбитранные дистрибутивы с systemd

Введение

Эффективный мониторинг оперативной памяти (RAM) — ключевой навык для администратора Linux и разработчика, работающего с серверами. Некорректное использование памяти приводит к замедлению системы, ошибкам OOM Killer и аварийным перезагрузкам. В этом гайде вы узнаете, как с помощью встроенных и сторонних инструментов получить точную информацию о состоянии памяти, интерпретировать её и принимать обоснованные решения.

Основные команды для быстрого просмотра

free: общая статистика

Самый простой способ получить сводку:

free -h

Пример вывода:

              total        used        free      shared  buff/cache   available
Mem:           7.7G        1.2G        5.1G        156M        1.4G        6.1G
Swap:          2.0G          0B        2.0G

Ключевые столбцы:

  • total — общий объём.
  • used — utilised memory (приложения + кэши). Не путать с реальным потреблением!
  • free — полностью неиспользуемая память (в Linux это значение часто мало).
  • buff/cache — память, занятая кэшем диска и буферами.
  • availableсамый важный показатель. Оценка памяти, доступной для новых процессов без своппинга.

💡 Совет: Всегда смотрите на available, а не на free. Высокий buff/cache — это нормально и полезно.

top / htop: мониторинг в реальном времени

top есть в любой системе. Для более удобного интерфейса установите htop.

htop

В htop:

  • Нажмите F6 → выберите сортировку по %MEM (процент от общей RAM) или RES (физическая память в KiB).
  • Столбец VIRT — виртуальная память (включая разделяемые библиотеки, своп).
  • Столбец SHR — разделяемая память (например, общие библиотеки).

vmstat: сводка по виртуальной памяти

vmstat -s

Покажет детальную статистику, включая количество своп-ин и аут.

/proc/meminfo: «сырые» данные от ядра

cat /proc/meminfo

Это источник для всех вышеперечисленных утилит. Полезно для скриптов.

sar: исторические данные (требует настройки)

Если установлен пакет sysstat:

sar -r 1 3  # каждую секунду, 3 раза

Графические утилиты

Для рабочих станций с GUI:

  • GNOME System Monitor (gnome-system-monitor): вкладка «Ресурсы» показывает графики памяти и свопа.
  • KDE System Guard (ksysguard): аналогичен, с возможностью добавления датчиков.

Расширенные инструменты

nmon — мощный мониторинг в одном окне

Установка:

# Ubuntu/Debian
sudo apt install nmon

# RHEL/CentOS/Fedora
sudo yum install nmon  # или dnf

Запуск: nmon. Нажмите m для memory-графиков, c для CPU, d для диска. q — выход.

glances — кросс-платформенный монитор с веб-интерфейсом

Установка:

pip3 install glances  # требует Python

Запуск:

glances

Для удалённого мониторинга:

glances -w  # запускает веб-сервер на порту 61208

Затем откройте в браузере http://<ваш_сервер>:61208.

Как интерпретировать показатели

Распространённые ошибки новичков

  1. Свободная память (free) близка к нулю — это нормально. Linux использует RAM для кэша. Смотрите на available.
  2. Своп (swap) активно используется — если si/so в vmstat постоянно не ноль, система активно своппит. Это признак нехватки RAM.
  3. Высокий buff/cache — не проблема. Система освободит эту память, если процессу понадобится.
  4. RES процесса больше, чем VIRT — обычно невозможно. Проверьте, не дублируется ли процесс в top (например, потоки).

Тревожные сигналы

  • available < 10% от total.
  • Постоянный si/so > 0 в vmstat.
  • Частые сообщения Out of memory в dmesg или логах (journalctl -k | grep -i oom).

Автоматизация мониторинга

Простой скрипт для отправки предупреждений

Создайте /usr/local/bin/memory_alert.sh:

#!/bin/bash
THRESHOLD=90  # процент
CURRENT=$(free | awk '/Mem:/ {printf("%.0f"), $3/$2 * 100}')
if [ "$CURRENT" -ge "$THRESHOLD" ]; then
    echo "Внимание: использование памяти ${CURRENT}% (порог ${THRESHOLD}%)" | \
    mail -s "Алерт: память на $(hostname)" admin@example.com
fi

Добавьте в crontab (crontab -e):

*/5 * * * * /usr/local/bin/memory_alert.sh

Логирование через sar

Настройте sysstat (в большинстве дистрибутивов уже установлен):

sudo systemctl enable --now sysstat

Данные будут собираться каждые 10 минут. Просмотр:

sar -r -f /var/log/sa/sa$(date +%d)  # за сегодня

Сравнение инструментов

ИнструментПлюсыМинусыКогда использовать
freeПростота, есть вездеНет детализации по процессамБыстрая проверка в скриптах
top/htopИнтерактив, сортировкаТолько снимок на момент запускаПоиск «прожорливых» процессов
vmstatСводка по свопу, CPUМало деталей по памятиОбщая оценка нагрузки
sarИстория, автоматический сборТребует настройкиАнализ трендов, пост-мортем
nmonГрафики, все метрики в одномТолько консольный, сложный UIГлубокий анализ в реальном времени
glancesВеб-интерфейс, кросс-платформаТребует Python, больше ресурсовУдалённый мониторинг нескольких серверов

Дополнительные возможности

Мониторинг памяти конкретного процесса

# Узнать, сколько памяти использует процесс с PID 1234
pmap -x 1234 | tail -1

Поиск процессов, использующих своп

for pid in $(ls /proc | grep '^[0-9]'); do
    swap=$(grep VmSwap /proc/$pid/smaps 2>/dev/null | awk '{sum+=$2} END {print sum}')
    if [ "$swap" -gt 0 ]; then
        echo "PID $pid использует ${swap}KiB свопа: $(ps -p $pid -o comm=)"
    fi
done

Проверка фрагментации памяти (только для NUMA-систем)

numactl --hardware

Заключение (последняя содержательная секция)

Эффективный мониторинг памяти в Linux строится на двух китах: регулярный сбор базовой статистики (free, top) и углублённый анализ при проблемах (nmon, glances, pmap). Не паникуйте при высоком показателе buff/cache — это оптимизация ядра. Сфокусируйтесь на available и активности свопа.

Начните с простого: добавьте в свой ежедневный чек-лист команду free -h и htop для быстрой оценки. При возникновении проблем используйте nmon для записи сессии (nmon -f -s 10 -c 100) и последующего анализа.

Помните: лучший мониторинг — тот, который настроен заранее и предупреждает об проблемах до их критического развития. Автоматизируйте сбор данных через sar или glances и настройте алерты на низкий available.

Часто задаваемые вопросы

Какой командой быстро увидеть общую статистику по памяти?
В выводе `free` что такое `available` и чем она отличается от `free`?
Как мониторить память в реальном времени с графиком?
Почему `used` в `free` огромный, а система не тормозит?

Полезное

Установите необходимые утилиты (опционально)
Проверьте общую статистику памяти
Изучите динамику процессов
Проанализируйте детальную информацию по процессу
Включите сбор исторических данных
Настройте графический мониторинг (если есть GUI)

Эта статья помогла вам решить проблему?

Похожее

Мониторинг дискового пространства в Linux: команды и практика

В этом руководстве вы освоите ключевые утилиты Linux для анализа дискового пространства, научитесь находить большие файлы и каталоги, а также настроите базовый мониторинг.

Управление процессами в Linux: от базовых команд до systemd

Этот гайд научит вас находить, анализировать и управлять процессами в Linux с помощью командной строки. Вы освоите как базовые утилиты (ps, top, kill), так и современный менеджер systemd, что позволит вам контролировать работу системы и решать связанные проблемы.

OOM Killer в Linux: как обнаружить и предотвратить

Этот гайд объясняет механизм OOM Killer в Linux и предоставляет практические шаги по диагностике и предотвращению завершения процессов из-за нехватки памяти. Вы научитесь анализировать логи, настраивать приоритеты процессов и управлять памятью с помощью cgroups.