LINUX.ORG.RU
ФорумAdmin

В чем разница между free и available полями в выводе команды free?

 


0

2

В ответе на похожий вопрос на serverafult говорится, что available память - это разница между free памятью и блоками резерва в памяти для суперюзера. В этом случае free память всегда должна быть больше, чем available. Но в моем случае available память значительно больше, чем free: 11Gi для free и 50Gi для available.

Важно не допускать истощения free памяти, или низкий показатель free памяти допустим, если доступна available память?



Последнее исправление: alekseipa5 (всего исправлений: 2)
Ответ на: комментарий от futurama

В этом случае прав ли я в том, что до тех пор, пока у меня не утекает И free, И available память, приложениям памяти будет хватать.

Беспокоиться стоит лишь в том случае, если одновременно и free, и available память стремятся к нулю? В таком варианте приложениям не будет хватать уже «незанятой» памяти, и не будет возможности получить память, удалив кэш файлов.

alekseipa5
() автор топика
Ответ на: комментарий от nebularia

Warning signs of a genuine low memory situation that you may want to look into:

  • available memory (or «free + buffers/cache») is close to zero

То есть - еще раз - если available memory стремится к нулю, тогда приложениям будет оставаться лишь free memory. По истечении последней, памяти не останется совсем, и это приведет к проблемам.

Верно понял?

alekseipa5
() автор топика
Ответ на: комментарий от futurama

Хочешь обсудить вопрос/ответ 2011 года?

Вообще-то несовсем 2011. Кое-что изменилось. Было:

$ uname -r
4.9.333-std-def-alt0.M80P.1
$ free -V
free from procps-ng 3.3.7-alt2
$ free
             total       used       free     shared    buffers     cached
Mem:       3094836    2818504     276332          0      59852    2337108
-/+ buffers/cache:     421544    2673292
Swap:      5855656     117148    5738508
Стало:
$ uname -r
5.10.200-std-def-alt1
$ free -V
free from procps-ng 3.3.17-alt7.g37f1060.p10.2
$ free
               total        used        free      shared  buff/cache   available
Mem:         8133052     2058508     2177632        6140     3896912     5760512
Swap:        4192928       56752     4136176

И если в 2011 было понятно, что 59852+2337108+276332=2673292, то вот теперь 2177632+3896912=6074544, а совсем не 5760512. И куда потерялись 314032 понятно не очень. Хотя, конечно, есть подозрение, что у ядра поменялись какие-то механизмы работы с памятью и стала попадатся какая-то фрагментация, которая не подлежит использованию, хотя и free. Или у ядра это было давно, но старый free ту память считал занятой.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

И можно ещё вот так до кучи:

$ uname -r
4.9.337-std-def-alt0.M80P.1
$ free -V
free from procps-ng 3.3.7-alt2
$ ./free -V
lt-free from procps-ng 3.3.15-alt1

$ free ; echo ---------------- ; ./free
             total       used       free     shared    buffers     cached
Mem:       3971400    3816784     154616          0     127504    1290332
-/+ buffers/cache:    2398948    1572452
Swap:     16777212     599592   16177620
----------------
              total        used        free      shared  buff/cache   available
Mem:        3971400     2175880      154232      328360     1641288     1179936
Swap:      16777212      599592    16177620

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

И куда потерялись 314032 понятно не очень.

Вроде, давно, можно сказать всегда так было. Возможно, когда-то очень давно ядро могло освободить всю buffers/cache память, поэтому free и выводил, ″-/+″ строку. А потом часть буферов стали не сбрасываемые, допустим, tmpfs. А ядро косвено сообщает об этом в поле MemAvailable в /proc/meminfo. Не прошло и (N+1) лет, как free переписали и перестали суммировать поля, а стали просто выводить что сообщает ядро по поводу «в принципе доступной» здесь и сейчас памяти, если освободить всё что можно.

mky ★★★★★
()

Нет, тот вопрос ничем не похож, свободное место на ФС и свободная память совсем разные вещи. На обычной ФС место или занято файлами, или нет, там нет чего-то, что ФС может удалить без потери данных.

Что касается ОЗУ, то пока available есть, то всё должно быть хорошо, а free памяти может быть совсем мало.

mky ★★★★★
()
Ответ на: комментарий от mky

насколько я понимаю, точный объем реклеймбл из buffers/cache посчитать видимо невозможно. MemAvailable в ядре не было, free высвобождаемый объем оценить не могло, соответственно и никакой колонки available в выхлопе не было. потом в ядре появилось MemAvailable - это примерная оценка, но лучше тем что добавляет подсчет в ядро, где его будут обновлять независимо от программ. free добавило эту колонку, но считало used по-старому, затем новые free стали считать used как total-available.

asdpm
()
Ответ на: комментарий от alekseipa5

То есть - еще раз - если available memory стремится к нулю, тогда приложениям будет оставаться лишь free memory

Нет, не верно. Available содержит в себе free.

Другими словами:

  • «free» — это память, полностью свободная вот прямо сейчас;
  • «available» — это память, которую можно по запросу выдать прикладным приложениям без особых проблем.

Если более точно, «available» = «free» + сумма памяти, выделенной под кэши и прочие данные, которые ядро может при необходимости отбросить. Это значение оценочное (т.е. не точное), но это лучшее, что можно получить.

Поскольку Linux всегда стремится занять всю оперативную память под страничный кэш (https://www.linuxatemyram.com уже запостили), значение «free» на практике не имеет большого смысла. Нужно смотреть в первую очередь на «available».

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Ответ на: комментарий от asdpm

насколько я понимаю, точный объем реклеймбл из buffers/cache посчитать видимо невозможно

Да, точно подсчитать объём reclaimable памяти очень сложно. В ядре есть кое-какие метрики на эту тему, но они неточны.

MemAvailable в ядре не было, free высвобождаемый объем оценить не могло, соответственно и никакой колонки available в выхлопе не было. потом в ядре появилось MemAvailable - это примерная оценка, но лучше тем что добавляет подсчет в ядро, где его будут обновлять независимо от программ. free добавило эту колонку, но считало used по-старому, затем новые free стали считать used как total-available.

Да, всё так.

intelfx ★★★★★
()

Сбрось файловый кэш

sync; echo 1 > /proc/sys/vm/drop_caches;
sync; echo 2 > /proc/sys/vm/drop_caches;
sync; echo 3 > /proc/sys/vm/drop_caches;

И получишь free примерно равный available, ибо buff/cache всё равно немного останется.

LINUX-ORG-RU ★★★★★
()