Введение
Эффективный мониторинг оперативной памяти (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.
Как интерпретировать показатели
Распространённые ошибки новичков
- Свободная память (
free) близка к нулю — это нормально. Linux использует RAM для кэша. Смотрите наavailable. - Своп (
swap) активно используется — еслиsi/soвvmstatпостоянно не ноль, система активно своппит. Это признак нехватки RAM. - Высокий
buff/cache— не проблема. Система освободит эту память, если процессу понадобится. 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.