free показал у машины десятки свободных мебибайт и около 300 доступных. Узнай, какое из чисел — запас памяти.
free -h печатает память в удобных единицах: Mi — мебибайты, Gi — гибибайты. В строке Mem два похожих столбца — free и available, и в опыте они разошлись в несколько раз. Посмотри, как они меняются, когда машина читает с диска большой файл.
Прочитай большой файл
Посмотри память машины, затем прочитай журнал /var/log/lab-archive/access.log на 150 МиБ и посмотри память ещё раз.
Сначала предположи
Ты прочитаешь файл на 150 МиБ. Что станет со столбцом available?
Теперь начни упражнение, выполни команду и сверь прогноз с выводом.
Столбцы строки Mem:
| Столбец | Что в нём |
|---|---|
| total | вся память, которой распоряжается ядро |
| used | занято процессами и ядром |
| free | не занято ничем |
| buff/cache | кэш файлов: прочитанное и записанное недавно |
| available | сколько можно отдать процессам без swap |
Ядро не держит память пустой. Всё прочитанное с диска остаётся в кэше, чтобы следующее чтение того же файла не шло на диск. Поэтому free на работающем сервере мал, и это нормально: понадобится память процессу — ядро выбросит кэш. Ты прочитал файл на 150 МиБ, и free уменьшился на столько же, а available почти не изменился: кэш входит в доступную память.
Запас памяти показывает available — то же число, что строка MemAvailable в /proc/meminfo. У машины урока это около 300 МиБ из 458.
У сервера с 4 ГиБ free -h показывает: free 40Mi, buff/cache 2.1Gi, available 2.3Gi. Коллега хочет срочно добавить памяти. Что скажешь?
-
Малый free на работающем сервере нормален: прочитанные файлы лежат в кэше. Запас показывает available — 2,3 ГиБ.
-
free вырастет, но следующие чтения пойдут с диска и станут медленнее. available при этом почти не изменится — запаса не прибавится.
Запас памяти — available: в нём и свободная память, и кэш, который ядро выбросит, когда процессам понадобится память. 2,3 ГиБ из 4 — больше половины.