Linux "free -m": общие, используемые и свободные значения памяти не складываются

В linux-системе при использовании "free" следуют значения:

         total      used      free    shared  buff/cache   available
Mem:  26755612    873224    389320    286944    25493068    25311948
Swap:        0         0         0

Суммарные, используемые и свободные значения не складываются. Я ожидаю, что total = used + free.

Вопрос: Что мне здесь не хватает?

Ответ 1

Для основной памяти фактический размер памяти можно вычислить как used+free+buffers+cache ИЛИ used+free+buffers/cache, потому что buffers/cache = buffer+cache.

Страница руководства free выделяет used как Used memory (calculated as total - free - buffers - cache)

Как говорится на странице man free: -

всего Общая установленная память (MemTotal и SwapTotal in/proc/meminfo)

используется Используемая память (рассчитанная как общий - буфер - кеш)

бесплатно Неиспользуемая память (MemFree и SwapFree in/proc/meminfo)

общий Используемая память (в основном) tmpfs (Shmem in/proc/meminfo,               на ядрах 2.6.32, отображается как ноль, если недоступно)

буферы Память, используемая буферами ядра (Буферы в /proc/meminfo )

кеш Память, используемая кешем страницы и слябами (Cached и Slab in               /Proc/MemInfo )

buff/cache Сумма буферов и кешей

. Оценка того, сколько памяти доступно для запуска новых приложений без обмена. В отличие от данных, предоставленных кешем или свободными полями, в этом поле учитывается кеш страниц, а также то, что не все исправляемые плит памяти будут исправлены из-за использования элементов (MemAvailable in/proc/meminfo, доступных на ядрах 3.14, эмулированных на ядра 2.6.27+, в противном случае такие же, как и свободные)

В вашем случае


873224 (используется) + 389320 (бесплатно) + 25493068 (buff/cache) = 26755612 (всего)


Ответ 2

Linux любит кэшировать каждый файл, который он открывает. Каждый раз, когда вы открываете файл для чтения, Linux будет кэшировать его, но он потеряет эти кеши, если ему нужна память для чего-то более важного - например, когда процесс в системе хочет выделить больше памяти. Эти кэши в памяти просто ускоряют работу Linux, когда одни и те же файлы используются снова и снова. Вместо того, чтобы фактически переходить на диск каждый раз, когда он хочет прочитать файл, он просто получает его из памяти, а память намного быстрее этого диска. Вот почему ваша система показывает 25493068, используемые в buff/cache, но также показывает 25311948. Большая часть данных кэширования может быть освобождена, если система нуждается в ней.