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

Ответ

Нет, кэшированная память (buffers/cache) не считается свободной в классическом понимании. Она занята ядром Linux для ускорения операций ввода-вывода, например, для кэширования часто читаемых файлов или отложенной записи (write-back).

Ключевые моменты:

  • Назначение: Ускорение доступа к диску. Если данные уже в кэше, не нужно обращаться к медленному диску.
  • Поведение при нехватке памяти: Ядро может быстро освободить эту память, если приложению потребуется больше RAM. Поэтому в утилите free есть колонка available — это оценка памяти, которую можно использовать для новых процессов без свопинга, включая часть кэша.
  • Анализ: Смотреть нужно не на free, а на available.

Пример вывода free -h:

               total        used        free      shared  buff/cache   available
Mem:            15Gi        10Gi       500Mi       1.0Gi        4.5Gi        3.8Gi
Swap:          2.0Gi       0.0Ki       2.0Gi

Здесь buff/cache = 4.5 GiB, free = 500 MiB, но available = 3.8 GiB. Для системы доступно около 3.8 GiB, так как часть кэша может быть освобождена.

Ответ 18+ 🔞

А, ну это классика, ёпта! Каждый раз, когда кто-то смотрит на free и видит там ноль в свободной памяти, у него волнение ебать начинается. "Ой, всё, сервер накрылся медным тазом, память кончилась!" — а на самом деле всё в порядке.

Смотри, чувак, вот в чём прикол. Эта штука buff/cache — это не память, которую кто-то украл и спрятал. Это как разумный засланец ядра. Система смотрит: "Так, оперативки дохуя свободной, а диск — тормозной урод. Давайте я буду держать в быстрой оперативке то, что часто читают или собираются писать". И делает она это не просто так, а чтобы всё летало.

Самое главное, что нужно понять:

  • Для чего? Чтобы не ждать этот долбаный диск. Данные уже в RAM — доступ мгновенный. Это гениально просто.
  • Что будет, если памяти реально не хватит? А вот тут магия. Ядро не дурак. Оно моментально скажет этому кэшу: "Э, сабака сука, подвинься, приложению нужно место!" И кэш освободится. Быстро. Поэтому в новых версиях free и появилась колонка available — это и есть честный ответ на вопрос "сколько памяти можно взять прямо сейчас?".
  • На что смотреть? Забей хуй на колонку free. Смотри строго на available. Вот это — твоя правда.

Вот смотри на пример, как на картинке в учебнике:

               total        used        free      shared  buff/cache   available
Mem:            15Gi        10Gi       500Mi       1.0Gi        4.5Gi        3.8Gi
Swap:          2.0Gi       0.0Ki       2.0Gi

Видишь эту панику? free — всего 500 мегов! Овердохуища! Но available — 3.8 гига! Почему? Да потому что из этих 4.5 гигов в buff/cache система готова отдать под твои нужды почти всё. Она их держит про запас, на всякий случай, но если надо — хуй с горы, и память свободна.

Так что не бзди. Если available прилично больше нуля — всё пиздато. Система не дебил, она знает, что делает. А эта хитрая жопа с кэшем — одна из причин, почему Линукс такой шустрый.