Вопрос или проблема
Я задаю вопрос: почему в моем CentOS7 значение available иногда меньше, чем free?
Я думаю, что значение available равно free + buff + cache, available означает, сколько памяти можно использовать при запуске приложения?
[root@izuf6dbkdletdzecvyepl8z ~]# free -m
total used free shared buff/cache available
Mem: 992 160 380 342 451 44
Swap: 0 0 0
available
Оценка того, сколько памяти доступно для запуска новых приложений без использования свопа. В отличие от данных, предоставляемых полями cache или free,
это поле учитывает кэш страниц, а также то, что не вся память, которую можно вернуть, будет возвращена из-за того, что элементы находятся в использовании
(MemAvailable в /proc/meminfo, доступно в ядрах 3.14, эмулируется в ядрах 2.6.27+, в противном случае такое же, как free)
Буферизованная/кэшированная память – это ОЗУ, которая использовалась процессом – например, Firefox – но процесс завершился. Но системе сейчас не нужна эта RAM, так зачем же ее очищать? Кто-то может захотеть считать бинарный файл Firefox и связанные библиотеки обратно в память… так что она остается кэшированной в ОЗУ до тех пор, пока эта RAM не понадобится процессу ИЛИ бинарный файл Firefox (или любой другой) не будет перезапущен.
Вы можете протестировать это, перезагрузив вашу систему, а затем, после полной загрузки рабочего стола и т.д., запустите Firefox или Chrome или Gimp или любое другое крупное приложение и замерьте, сколько времени это займет. Как только оно откроется, закройте его. Подождите немного или три, возможно, проверьте через ps
или другие утилиты, что оно действительно больше не запущено. Затем запустите таймер и снова запустите его. Гораздо быстрее, да? Это происходит потому, что вместо повторного считывания бинарных файлов/библиотек в RAM он просто повторно отмечает кэшированные области RAM как “в использовании”.
Ответ или решение
Вопрос, почему значение доступной памяти (available
) в выводе команды free
на CentOS 7 иногда бывает меньше, чем значение свободной памяти (free
), требует детального объяснения механизмов управления памятью в операционной системе Linux.
Основные понятия о памяти в Linux
Для начала, необходимо определить, что каждый из этих терминов означает:
-
Free (Свободная память): Это объем оперативной памяти, который в данный момент не занят никакими процессами. Эта память может быть сразу использована для новых приложений.
-
Available (Доступная память): Это более сложный показатель, который учитывает не только свободную память, но и память, занятую кэшами и буферами. Эта метрика показывает, сколько памяти может быть использовано новыми приложениями без необходимости их выгрузки на диск (swap).
-
Buffers/Caches (Буферы/Кэши): Это память, которая используется системой для хранения временных данных, чтобы ускорить доступ к часто используемым файлам или приложениям. Например, если вы запускаете приложение, такие как Firefox, и затем закрываете его, система не сразу освобождает занятую память, а оставляет ее в кэше на случай, если приложение будет запущено повторно.
Почему значение доступной памяти может быть меньше свободной памяти?
На первый взгляд может показаться, что доступная память должна состоять из свободной памяти плюс буферы и кэши. Однако это неверное утверждение, поскольку Linux использует более сложный алгоритм управления памятью. Причины, по которым значение доступной памяти может оказаться меньше свободной памяти, могут включать:
-
Использование кэшей: Даже если в системе много свободной памяти, не все кэши могут быть освобождены, если система решит, что они могут понадобиться в ближайшем будущем. Например, если некоторые данные в кэше были недавно использованы, Linux может решить, что эти данные более ценны, чем предложение освободить память для нового приложения.
-
Фрагментация памяти: Память может быть фрагментирована, и даже если в наличии достаточно памяти, не все участки могут быть объединены для использования. Поэтому вы можете увидеть, что доступная память меньше, чем сумма свободной и кэшированной памяти.
-
Системные процессы: Некоторые процессы моги заблокировать части памяти, которые не могут быть немедленно освобождены для новых приложений, увеличивая разницу между свободной и доступной памятью.
Пример вывода free -m
на CentOS 7
Вывод команды показывает следующие значения:
total used free shared buff/cache available
Mem: 992 160 380 342 451 44
Swap: 0 0 0
- Общая память: 992 МБ
- Используемая память: 160 МБ
- Свободная память: 380 МБ
- Кэши и буферы: 451 МБ
- Доступная память: 44 МБ
Заключение
Ваша догадка о том, что доступная память равна свободной памяти плюс кэши и буферы, хотя и частично верна, не учитывает более сложные аспекты управления памятью в Linux. Доступная память — это не просто сумма свободной памяти и кэшей, а более сложная метрика, учитывающая состояние системных процессов и использование кэшей.
Для решения проблем с памятью можно рассмотреть увеличение объема ОЗУ или оптимизацию работающих приложений для более эффективного использования ресурсов.