Пятничный мем
Старый дедовский способ
Войти в IT, так сказать)
Источник - Как прекрасен этот мем
Пятничный мем
Свободная и доступная память в Linux
Несмотря на достаточно спорный заголовок, рассуждения ниже будут отнюдь не о безнравственном поведении памяти в Linux.
Время от времени нам полезно знать как именно наша система использует память, так что в статье будет предпринята попытка объяснить разницу между свободной памятью, и доступной.
Свободная vs. Доступная память
Давайте сразу к делу. Итак, что такое свободная память, и чем она отличается от доступной.
Свободная память (free memory) - это объем памяти, который сейчас ни для чего не используется. По этой причине, особенно на серверах, удобно воспринимать свободную память, как тратящуюся впустую. После того, как ваши приложения/процессы были запущены и прошло значительное время безотказной работы, это число почти всегда должно быть небольшим.
Доступная память (available memory) - это объем памяти, который доступен для выделения новому или существующему процессу. Доступная память оценивается в количестве памяти которую можно выделить, без использования подкачки.
Ключевая разница между свободной и доступной памятью заключается в том, что свободная память не использована, и не занята ничем. Тогда как в противоположность ей, доступная память используется, и включает в себя, помимо прочего, кэши и буферы, которые можно освободить без снижения производительности за счёт использования свопа.
Сравнение свободной и доступной памяти на практике
Учитывая всё вышесказанное, давайте взглянем на пару серверов Linux с 60 гигами памяти на борту, 12 ядрами и swap разделом на Raid 10 собранном из NVMe накопителей. Условно обозначим их как "Server A" и "Server B". В первую очередь воспользуемся командой free.
free -h
Вывод будет примерно похож на демонстрируемый на скриншотах ниже (там так же выполнена команда uptime, чтобы показать, что сервера живут без ребута уже достаточно давно)
У этого сервера меньше 1% свободной памяти, и 13% доступной
А вот здесь, спустя 153 дня работы 30гигов памяти по прежнему тратятся впустую
На этих скриншотах хорошо видна разница между свободной и доступной памятью. При сравнении двух систем явно видно, что даже несмотря на то, что средняя загрузка у них очень похожая (обрабатываются одни и те же рабочие нагрузки), один сервер использует практически 100% памяти (Server A), а второй тратит больше 50% памяти впустую (Server B).
Обратите внимание, что ядро Linux переместит наименее часто используемые страницы памяти в пространство подкачки, даже если имеется доступная память.
При взгляде на эти системы любой админ задастся сразу несколькими справедливыми вопросами:
Замедляет ли свопинг производительность на сервере A
Следует ли вытащить пару плашек из сервера B, чтобы задействовать в другом месте?
Например может задействовать в сервере А, которому явно не хватает?
Ожидается ли в ближайшее время рост трафика/загрузки?
В часы пиковой нагрузки, когда задействован свпо, средняя загрузка остаётся ниже 12.00?
Можно ли настроить сервер B на использование большего количество буфферов и кэша?
Поскольку часть вопросов риторическая, то разумеется каждому администратору, при возникновении подобной ситуации придётся самому отвечать на них (или запрашивать помощь друга).
Заключение
Не позволяйте себе ловить себя на том, что вы смотрите на свободную память в вашей системе Linux и делаете поспешные выводы. Не забывайте, что вам также следует учитывать доступную память, буферы/кэши и другие факторы. Короче говоря каждый случай требует отдельного рассмотрения.
Для более детального изучения механизма управления памятью можно например почитать - https://docs.kernel.org/admin-guide/mm/index.html.
Дикая природа IT удивительна
Взято из телеграмма - Инкогнито
Поиграем в бизнесменов?
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.