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

Что такое available в информации о памяти?

2.0 Middle🔥 201 комментариев
#Linux и администрирование

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

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

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

Понимание метрики "Available" в информации о памяти

В контексте мониторинга памяти в Linux-системах, показатель "Available" — это критически важная метрика, которая отражает объём памяти, реально доступный для запуска новых приложений без необходимости активного вытеснения страниц (swapping). Этот показатель появился в ядрах Linux примерно с версии 3.14 как более точная и полезная альтернатива устаревшему и часто вводящему в заблуждение показателю "Free".

Разница между "Available" и "Free" памятью

Чтобы понять суть Available, нужно сравнить его с другими полями в выводе команды free -h или /proc/meminfo.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        234M        456M        5.4G        4.9G
Swap:          2.0G        0B          2.0G
  • Free: Это память, которая полностью не используется системой. Она абсолютно свободна. Однако в современных ОС свободная память считается неэффективно используемым ресурсом. Ядро активно использует её для кэширования дисковых операций (буферы и кэш страниц) для ускорения работы системы.
  • Available: Это оценочный объём памяти, доступный для новых нагрузок. Он рассчитывается как Free + часть кэшей, которую можно немедленно освободить без ущерба для производительности. Эта "часть" включает:
    *   **Reclaimable Page Cache**: Кэш файловых данных, которые могут быть перечитаны с диска.
    *   **Часть памяти slab**: Часть внутренних структур ядра, которая может быть освобождена.
    *   **Неактивные страницы** в списках анонимной памяти (но до начала swapping).

Таким образом, в примере выше, хотя Free всего 234 МБ, для пользователя доступно целых 4.9 ГБ. Система эффективно использует память под кэш, но готова мгновенно его очистить, если потребуется ресурс для нового приложения.

Как рассчитывается "Available"?

Ядро Linux вычисляет это значение, анализируя различные зоны памяти. Упрощённо логику можно описать так:

  1. Берётся объём памяти Free.
  2. Добавляется объём кэша страниц (page cache), который не используется активно (inactive_file). Этот кэш можно отдать моментально.
  3. Добавляется часть slab-памяти, помеченная как reclaimable (например, кэши имён файлов dentry и inode).
  4. Из полученной суммы вычитается водяной знак низкой памяти (low watermark) — минимальный резерв, который система старается держать свободным для служебных нужд и быстрой реакции.

Алгоритм реализован в ядре. Точное значение можно увидеть в /proc/meminfo:

$ grep -E "(MemAvailable|MemFree|Cached|SReclaimable)" /proc/meminfo
MemFree:         240124 kB
Cached:         4521104 kB
SReclaimable:    514812 kB  # Часть Slab, которую можно освободить
MemAvailable:   5123456 kB  # Рассчитанное доступное значение

Практическое значение для DevOps/SRE

Понимание Available является краеугольным камнем для:

  1. Адекватного мониторинга и алертинга. Правило номер один: не алертить на низкий показатель Free. Настройка алертов должна ориентироваться на Available. Например, критическим уровнем может быть значение ниже 10% от общей памяти или абсолютного порога (например, 500 МБ).

    # Пример проверки для скрипта или системы мониторинга
    AVAILABLE_KB=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
    TOTAL_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
    THRESHOLD_PERCENT=10
    
    if (( AVAILABLE_KB * 100 / TOTAL_KB < THRESHOLD_PERCENT )); then
        echo "CRITICAL: Available memory is below ${THRESHOLD_PERCENT}%!"
    fi
    
  2. Диагностики проблем с производительностью. Если Available приближается к нулю, система начнёт:

    *   **Агрессивно очищать кэш диска**, что приведёт к резкому росту нагрузки на I/O (iowait) и замедлению всех операций с файлами.
    *   **Активировать Swapping (подкачку)**, если swap включён. Это приводит к ещё большему падению производительности из-за дисковых операций.
    *   В крайних случаях — запускать **OOM-Killer**, который начнёт принудительно завершать процессы.

  1. Планирования ресурсов и автомасштабирования. Автоскейлеры кластеров (Kubernetes, облачные группы) должны принимать решения на основе Available памяти на узлах, а не Free. В Kubernetes метрики node_memory_MemAvailable_bytes из node-exporter — основа для корректных решений о планировании подов и масштабирования.

Резюме

Available — это интеллектуальная оценка ядра, показывающая, сколько памяти на самом деле готово для новых задач. Она учитывает, что современные операционные системы стратегически используют свободную память для кэширования, но могут быстро её освободить. Для инженера, отвечающего за надёжность и производительность систем, мониторинг Available вместо Free — это обязательная практика, которая позволяет избежать ложных тревог и точно диагностировать реальную нехватку памяти (memory pressure).