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

Является ли кэшированная память свободной?

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

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

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

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

Кэшированная память в Linux: свободная или занятая?

Это важный и часто задаваемый вопрос, который требует четкого понимания концепции управления памятью в Linux. Короткий ответ: кэшированная память (cached memory) в Linux НЕ является "свободной" в классическом понимании, но она считается "доступной" (available) для операционной системы и может быть быстро освобождена для нужд новых процессов.

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

Анализ стандартного вывода free -h

Рассмотрим пример:

$ free -h
              total        used        free      shared    buff/cache   available
Mem:           16Gi       4.2Gi       1.1Gi       245Mi        10Gi        11Gi
Swap:          8Gi        0B          8Gi

Ключевые поля:

  • total: Общая физическая память.
  • used: Память, активно используемая процессами (не включает buff/cache в современных версиях free).
  • free: Память, которая ничем не используется — это действительно "пустая", свободная память.
  • buff/cache: Сумма буферной (buffers) и кэшированной (cached) памяти.
  • available: Наиболее важный показатель! Это оценка памяти, которую могут использовать новые процессы без необходимости подкачки (swapping). Она включает free + buff/cache + часть других резервов, за вычетом минимально необходимых для системы кэшей.

Что такое cached memory и почему она не "free"?

Кэшированная память — это часть физической памяти, в которой операционная система хранит данные, уже прочитанные из диска (файлы, библиотеки, данные приложений). Цель — ускорить будущий доступ к этим данным, поскольку чтение из памяти на порядки быстрее чтения из диска.

Эта память ЗАНЯТА конкретными данными. Она не свободна в смысле "пустая". Однако, благодаря механизму управления памятью в Linux, она обладает ключевым свойством:

Кэшированная память является "отложительно свободной" (reclaimable). Когда новые процессы требуют больше памяти, а "свободной" (free) памяти недостаточно, ядро Linux может быстро и прозрачно освободить часть кэшированной памяти, вытеснив из нее наименее полезные данные. Освобождение происходит без ущерба для работающих процессов — если процесс потом попытается снова прочитать вытесненный файл, система просто загрузит его с диска (возможно, с небольшой потерей производительности).

Почему поле "available" так важно?

Поле available, появившееся в современных версиях free, было добавлено именно чтобы устранить путаницу. Оно дает практическую оценку памяти для новых процессов, учитывая reclaimable кэш. В примере выше:

  • free всего 1.1Gi — казалось бы, мало.
  • Но available — 11Gi! Это значит, что система может выделить примерно 11 гигабайт для новых приложений, мгновенно освободив большую часть кэша.

Заключение и практическое правило

Итак:

  1. free — это реально пустая, незадействованная память.
  2. cached (в составе buff/cache) — это занятая, но reclaimable память, хранящая полезные данные для повышения производительности.
  3. available — это основной показатель для оценки свободной памяти с точки зрения возможности запуска новых процессов. Если available достаточно — система здоров, даже если free мал.

Для DevOps/SRE важное правило мониторинга: Не тревожьтесь о низком значении free и высоком buff/cache. Это нормальная и оптимальная работа Linux, использующего память для кэширования. Тревожными сигналами являются:

  • Низкое значение available (близкое к нулю или сильно меньше потребностей ваших приложений).
  • Активное использование swap, когда available уже исчерпано — это указывает на реальную нехватку памяти и приводит к серьезному падению производительности.

Следите за available, а не за free.

Является ли кэшированная память свободной? | PrepBro