free: команда просмотра памяти Linux и алерты RAM | Глоссарий FREEHOSTING

free

free Memory Command
free — free — утилита Linux для просмотра использования оперативной памяти и swap. Показывает total, used, free, shared, buff/cache, available и помогает быстро понять, есть ли у системы реальный запас RAM или начался swap-троттлинг.

Определение простыми словами

Команда free читает /proc/meminfo и выводит сводку: сколько памяти всего, сколько занято процессами, сколько кешируется, сколько в swap. Главное число для админа — available: сколько RAM можно отдать новым процессам без вытеснения чужих данных. Колонка free часто маленькая, но это не повод для паники: Linux агрессивно использует свободную память под disk cache.

В отличие от htop, free выдаёт срез на момент вызова и подходит для скриптов и cron-алертов. Совместно с vmstat и /proc/pressure/memory покрывает 90% задач по диагностике RAM-проблем.

Сравнение колонок free -h

Колонка Что значит Когда смотреть
total Вся физическая RAM Capacity planning
used Занято процессами + ядром Всегда
free Совсем не использована Почти не информативна
shared tmpfs, разделяемая память Подозрение на /dev/shm
buff/cache Disk-кеш ядра Для понимания «псевдо-used»
available Реально доступно процессам Главная метрика

Кейсы использования

  • Алерт «available < 10% от total на протяжении 5 минут» — гораздо точнее, чем «free < 100 MB», потому что учитывает кеш. Часто связан с ростом Load Average.
  • Swap usage растёт при available > 0 → проблема в vm.swappiness, можно понизить до 10 без потери производительности.
  • Проверка перед деплоем: free -m показывает 200 MB available, новый Java-сервис требует 512 MB → не запускайте, увеличьте VPS или закройте лишнее.
  • Negative-сценарий: алерт настроен на свободную память (free), считает кеш «утечкой», ложно срабатывает каждые 10 минут. Бесполезный шум.
  • Для VPS: free показывает память контейнера (cgroup memory.limit), а не всю ноду. Полезно для понимания реального лимита от хостера.

Технические детали

# Основной вызов с человекочитаемыми единицами
free -h
#                total        used        free      shared  buff/cache   available
# Mem:           7.7Gi       1.2Gi       3.4Gi       128Mi       3.1Gi       6.0Gi
# Swap:          2.0Gi          0B       2.0Gi

# В мегабайтах для скриптов
free -m

# С обновлением каждые 2 секунды (как top)
free -h -s 2

# Алерт через cron + bc
* * * * * MEM=$(free | awk '/Mem:/ {print int($7/$2*100)}'); 
  [ "$MEM" -lt 10 ] && echo "low memory: ${MEM}%" | mail admin

# Очистка кешей (диагностика, не для прода под нагрузкой)
sync && echo 3 > /proc/sys/vm/drop_caches
free -h

# Понижение агрессивности swap
sysctl vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.d/99-mem.conf

# Источник данных
cat /proc/meminfo | head -5

Главный совет: смотрите available, а не free. Linux всегда «занимает» свободную RAM под page cache, потому что пустая память — потерянная память. available показывает, сколько ядро готово быстро отдать новому процессу без принудительного swap-out. Это та цифра, на которой строятся все нормальные алерты.

Частые вопросы

Почему free показывает мало свободной памяти?

Linux забирает свободную RAM под disk cache (buff/cache), это не утечка. Смотрите колонку available — это реально доступная память для новых процессов с учётом сбрасываемого кеша.

В чём разница total в free и реальной памяти ноды?

На VPS free показывает память контейнера (cgroup memory.limit), а не всей физической ноды хостера. Это лимит вашего инстанса, и больше него процессы не получат.

Как настроить алерт по памяти правильно?

По проценту available к total: «available < 10% за 5 минут». Алерт по free даёт ложные срабатывания, потому что Linux агрессивно кеширует диск и free всегда низкий.