← Назад к вопросам

Как посмотреть количество свободной оперативной памяти

1.3 Junior🔥 291 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Анализ вопроса: "свободная оперативная память"

Понятие "свободная оперативная память" (free RAM) в современных операционных системах, особенно Linux, является более сложным, чем кажется на первый взгляд. Ядро Linux активно использует свободную память для кэширования дисковых операций (буферы и кэш страниц), чтобы ускорить работу системы. Поэтому память, отображаемая как "free", — это лишь часть общей доступной памяти. "Свободной" в практическом смысле считается сумма MemFree (истинно свободная) и Cached (кэш, который может быть мгновенно освобожден), а иногда и Buffers.


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

1. Команда free (основной инструмент)

Утилита free предоставляет обзор использования памяти. Ключевые опции:

  • free -h — вывод в удобочитаемом формате (ГиБ, МиБ).
  • free -m — вывод в мегабайтах.
  • free -s 2 — непрерывный вывод с обновлением каждые 2 секунды.
$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       5.2Gi       2.1Gi       1.1Gi       7.7Gi       8.6Gi
Swap:          2.0Gi       0.0Gi       2.0Gi

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

  • free: Истинно свободная память, не используемая ни для чего.
  • buff/cache: Память, занятая буферами ядра и кэшем страниц. Эта память освобождается автоматически при запросе от приложений.
  • available: Ключевой показатель! Оценочный объем памяти, доступной для запуска новых приложений, без подкачки (swap). Включает free и часть buff/cache, которую можно быстро очистить. Это и есть реальная "свободная для использования" память. В примере выше она равна 8.6GiB.

2. Анализ файла /proc/meminfo (первичный источник данных)

Все утилиты (free, top) берут данные отсюда. Этот файл предоставляет детальнейшую статистику.

$ grep -E '^(MemFree|Cached|Buffers|MemAvailable|SwapFree)' /proc/meminfo
MemFree:        2201348 kB
Buffers:          244512 kB
Cached:         7917896 kB
MemAvailable:   9012640 kB
SwapFree:       2097148 kB

Расчет "эффективной свободной" памяти:

  • Быстрый ответ: Смотри на MemAvailable (есть в новых ядрах, >3.14).
  • Если MemAvailable нет: Эффективная свободная = MemFree + Buffers + Cached. В примере: ~10.2 GB.

3. Команда top или htop (интерактивный мониторинг)

В top информация о памяти отображается в заголовке.

$ top
... (первые строки)
MiB Mem :  15882.5 total,   2148.4 free,   5335.3 used,   8398.8 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   8800.2 avail Mem

Обратите внимание на строку avail Mem — это аналог MemAvailable из free. В htop эта информация представлена еще нагляднее, с цветными индикаторами.

4. Утилита vmstat (для проверки и анализа трендов)

Показывает не только мгновенное состояние, но и статистику за период.

$ vmstat -s -S M | grep memory
   15882 M total memory
    5335 M used memory
    3142 M active memory
    4465 M inactive memory
    2148 M free memory
    244 M buffer memory
   7917 M swap cache

Здесь также ключевой показатель — free memory, но для полной картины его нужно сложить с inactive memory (часть кэша), чтобы получить аналог available.

5. Использование awk для получения конкретного числа

Для скриптов часто нужно извлечь только числовое значение. Лучше всего ориентироваться на MemAvailable.

# Получить доступную память в мегабайтах
AVAILABLE_MB=$(grep MemAvailable /proc/meminfo | awk '{print $2 / 1024}')
echo "Доступная память: ${AVAILABLE_MB} MiB"

# Или в гигабайтах
AVAILABLE_GB=$(grep MemAvailable /proc/meminfo | awk '{print $2 / 1024 / 1024}')
printf "Доступная память: %.2f GiB\n" ${AVAILABLE_GB}

Почему "Available" важнее "Free"? DevOps-контекст

  1. Мониторинг и алертинг: При настройке систем мониторинга (Prometheus, Zabbix) алерты на низкую память должны срабатывать по значению node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes, а не по node_memory_MemFree_bytes. Алерт по Free будет давать ложные срабатывания на здоровой системе с активным дисковым кэшем.
  2. Планирование ресурсов: При планировании размещения приложений (в Kubernetes или на виртуальных машинах) необходимо ориентироваться на Available. Если в free мало, но в available много — система может смело запускать новые процессы.
  3. Диагностика проблем: Резкое падение available при росте used и падении buff/cache — верный признак того, что приложения исчерпывают физическую память, и система начинает вытеснять кэш. Если при этом начинает заполняться swap — это критическая ситуация, ведущая к значительному падению производительности ("swap thrashing").

Рекомендация для DevOps-инженера

Для быстрой ручной проверки всегда используйте free -h и смотрите на столбец available. Для автоматизации (скрипты, метрики) читайте значение MemAvailable из /proc/meminfo. Интерпретируя результаты, помните, что в здоровой Linux-системе значение "free" стремится к минимуму, а "available" должно быть достаточно для комфортной работы приложений. Наличие свободной памяти в buff/cache — это не проблема, а оптимальное использование ресурсов ядром.

Как посмотреть количество свободной оперативной памяти | PrepBro