Смысл строки буферов / кеша в выводе free

168

Почему мой сервер показывает

            total      used      free   shared buffers    cached
    Mem: 12286456  11715372    571084        0   81912   6545228
-/+ buffers/cache:  5088232   7198224
   Swap: 24571408     54528  24516880

Я понятия не имею о расчете памяти в Linux. Я думаю, что это говорит о том, что 5088232 используется там, где 7198224 свободен, то есть он фактически использует 5 ГБ ОЗУ?

Муахмад Зеешан
источник
2
serverfault.com/questions/23433/…
Кайл Брандт
3
linuxatemyram.com
Саша

Ответы:

232

Значение значений

Первая строка означает:

  • total: Ваша общая (физическая) оперативная память (исключая небольшой бит, который ядро ​​постоянно резервирует для себя при запуске); вот почему это показывает ок. 11,7 ГиБ, а не 12 ГиБ, что у вас, вероятно, есть.
  • used: память, используемая ОС.
  • free: память не используется.

total= used+free

  • shared/ buffers/ cached: Это показывает использование памяти для определенных целей, эти значения включены в значение для used.

Вторая строка дает скорректированные значения первой строки. Он дает исходное значение used минус сумма buffers+cachedи исходное значение free плюс сумма buffers+cached, отсюда и его название. Эти новые значения часто имеют большее значение, чем значения первой строки.

Последняя строка ( Swap:) предоставляет информацию об использовании пространства подкачки (то есть содержимое памяти, которое было временно перемещено на диск).

Фон

Чтобы действительно понять, что означают цифры, вам нужно немного рассказать о подсистеме виртуальной памяти (ВМ) в Linux. Просто короткая версия: Linux (как и большинство современных ОС) всегда будет пытаться использовать свободную оперативную память для кэширования, поэтому Mem: freeпочти всегда будет очень низким. Поэтому строка -/+ buffers/cache:показана, потому что она показывает, сколько памяти свободно при игнорировании кэшей; кэши будут освобождены автоматически, если памяти станет недостаточно, поэтому они не имеют большого значения.

В системе Linux действительно мало памяти, если freeзначение в -/+ buffers/cache:строке становится низким.

Для получения более подробной информации о значении чисел см., Например, вопросы:

Изменения в procps 3.3.10

Обратите внимание, что выходные данные freeбыли изменены в Props 3.3.10 (выпущен в 2014 году). Столбцы, о которых сообщалось, теперь имеют значения «total», «used», «free», «shared», «buff / cache», «available» , а значения некоторых значений изменены, в основном для лучшего учета плиты ядра Linux кэш.

См. Отчет об ошибке Debian # 565518 для мотивации, и что freeозначают изменения в выходных данных с 14.04 по 16.04? для более подробной информации.

sleske
источник
Не могли бы вы рассказать о том, что Linux может кэшировать? Будут ли это файлы, к которым обращались, или сетевые файлы?
CMCDragonkai
@CMCDragonkai: ответ на serverfault.com/questions/23433/… подробно описывает, что представляет собой «кеш» и «буфер».
Слеське
5
Я не думаю, что утверждение "total = used + free" является правильным, см. Следующий вывод на моей машине:$ free -h total used free shared buff/cache available Mem: 3.4G 585M 152M 11M 2.6G 2.5G Swap: 4.0G 84M 3.9G
Себастьян
@Sebastian: Ах интересно. Похоже, выход бесплатной был изменен (в 3.3.10). Я отредактировал свой ответ, чтобы упомянуть об этом. Если вы заинтересованы в этом изменении, подумайте над тем, чтобы задать новый вопрос :-).
слеске
3
total = used + free + buff/cache
danger89
2

Строка buffers / cache показывает, сколько памяти используется программами (первый из этих столбцов), и свободна для использования программами (второй столбец). Это довольно эзотерическое число, и не то, что вы бы на самом деле смотрели на практике.

romble
источник
А что означает первая строка (строка памяти)
Муахмад Зеешан
8
В системе установлено 12 ГБ ОЗУ, из которых 11,5 ГБ используется, а в настоящее время не используется 0,5 ГБ. Приблизительно 82 МБ используемой памяти используется для буферов (сетевых подключений и т. Д.), В то время как около 6,5 ГБ используется для хранения копий данных на диске, поэтому данные не нужно будет перечитывать, если они снова понадобятся.
Уомбл
3
@ Мухаммед: «82 МБ бесплатно». - нет, 57MiB бесплатен (но это не имеет значения, см. мой ответ). «Теперь все это означает, что система достигла своих пределов» - нет, совсем нет. В системе используется 6,9 ГБ для кэширования, которое она с готовностью предоставит приложениям, так что места много. Кроме того, использование свопа очень низкое (всего около 50 МБ). Если память начинает тесниться, использование свопа возрастет. В настоящее время вы используете только половину оперативной памяти.
слеске
4
Вы когда-нибудь задумывались над тем, чтобы задать новый вопрос?
womble
3
Я не согласен, строка буферов / кэша - это фактическая свободная память системы и, следовательно, наиболее важная, если вы хотите знать, есть ли в системе место для программ.
Eckes