Команда free в Linux
Сколько свободной оперативной памяти доступно в моей системе Linux? Достаточно ли свободной памяти для установки и запуска новых приложений?
В системах Linux вы можете использовать команду free чтобы получить подробный отчет об использовании памяти системой.
Команда free предоставляет информацию об общем объеме физической памяти и памяти подкачки , а также о свободной и используемой памяти.
Как использовать команду free
Синтаксис free команды следующий:
При использовании без какой-либо опции команда free будет отображать информацию о памяти и подкачке в кибибайтах. 1 кибибайт (КиБ) равен 1024 байтам.
Вывод будет включать три строки, заголовок, одну строку для памяти и одну для свопа:
Вот что означает каждый столбец:
- total — это число представляет общий объем памяти, который может быть использован приложениями.
- used — Используемая память. Он рассчитывается как: used = total — free — buffers — cache
- бесплатно — Свободная / неиспользуемая память.
- общий — этот столбец можно игнорировать, поскольку он не имеет значения. Это здесь только для обратной совместимости.
- buff / cache — объединенная память, используемая буферами ядра, а также страничным кешем и блоками. Эта память может быть освобождена в любое время, если это необходимо приложениям. Если вы хотите, чтобы буферы и кеш отображались в двух отдельных столбцах, используйте параметр -w .
- доступно — оценка объема памяти, доступного для запуска новых приложений без подкачки.
Отображение использования памяти в удобочитаемом формате
По умолчанию команда free показывает информацию о памяти в кибибайтах. Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), используйте параметр -h :
Отображение использования памяти в других показателях
Команда free также позволяет вам указать единицы измерения памяти. Допустимые варианты:
- -b , —bytes — отображать вывод в байтах.
- —kilo — отображать вывод в килобайтах (1 КБ = 1000 байт).
- —mega — отображать вывод в мегабайтах.
- —giga — Показать вывод в гигабайтах.
- —tera — Показать вывод в терабайтах.
- -k , —kibi — Показать вывод в кибибайтах. (1 КБ = 1024 байта). Это единица измерения по умолчанию.
- -m , —mebi — Показать вывод в мебибайтах.
- -g , —gibi — Показать вывод в гигабайтах.
- —tebi — отображать вывод в тебибайтах.
- —peti — Показать вывод в пебибайтах.
- —si — вместо 1024 используйте —mebi —si 1000. Например, —mebi —si равно —mega .
Например, чтобы отобразить результат в мегабайтах, введите:
Отображение итоговых значений столбца
Чтобы отобразить строку, показывающую итоги столбца, используйте параметр -t . Это дает вам сумму памяти и свопа в столбцах total, used и free.
Непрерывно печатать результат
Чтобы постоянно отображать информацию о памяти на экране, вызовите free с параметром -s ( —seconds ), за которым следует число, определяющее задержку.
Например, чтобы распечатывать информацию о памяти каждые пять секунд, вы должны выполнить:
free команда будет продолжать отображать результат, пока вы не нажмете CTRL+C Это похоже на поведение команды watch .
Чтобы отображать результат определенное количество раз, используйте параметр -c ( —count ). В примере ниже команда выведет результат десять раз:
Выводы
Мы показали вам, как использовать free команду для проверки использования памяти системой и интерпретации вывода команды. Чтобы просмотреть все доступные параметры, введите в терминале man free .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Что показывает колонка total в выводе утилиты free
Команда free позволяет вызывать одноименную утилиту, осуществляющую вывод информации об использовании оперативной памяти. Данная команда позволяет ознакомиться с информацией об использовании как физической памяти (RAM — Random Access Memory), представленной модулями с набором чипов в специальных слотах на материнской плате компьютера, так и памяти из раздела или файла подкачки подкачки (SWAP), расположенного на жестком диске или твердотельном накопителе. Вся выводимая с помощью команды информация с значительным набором дополнительных данных доступна из файла /proc/meminfo.
Базовый синтаксис команды выглядит следующим образом:
Наиболее важными параметрами являются параметр -t, позволяющий выводить информацию об общем количестве использованной памяти в отдельной строке, параметр -s, позволяющий обновлять вывод через заданный промежуток времени в секундах, параметр -c, позволяющий ограничить количество обновлений вывода заданным значением, параметр -l, позволяющий выводить информацию о нижней и верхней памяти, параметр -h, позволяющий выводить информацию в удобном для чтения человеком формате, а также параметры —bytes, —kilo, —mega, —giga, —tera, —peta, позволяющие выводить числовые значения в соответствующих единицах, а именно, байтах, килобайтах (утилита работает в данном режиме по умолчанию), мегабайтах, гигабайтах, терабайтах и петабайтах соответственно. Кроме того, существуют параметры —kibi, —mebi, —gibi, —tebi, —pebi, позволяющие выводить числовые значения в кибибайтах, мебибайтах, гибибайтах, тебибайтах и пебибайтах.
Вывод утилиты представлен в форме таблицы. В строке «Память» выводится информация об использовании физической памяти, в строке «Подкачка» — информация об использовании раздела или файла подкачки, в строке «Всего» — информация об общем количестве использованной и свободной памяти (в случае использования параметра -t). В столбце «Всего» приведено общее количество памяти (параметры MemTotal и SwapTotal файла /proc/meminfo), в столбце «Занято» — количество использованной памяти , в столбце «Свободно» — количество доступной памяти (параметры MemFree и SwapFree файла /proc/meminfo), в столбце «Общая» — количество разделяемой памяти (параметр Shmem файла /proc/meminfo), в столбце «буф./врем.» — количество памяти, используемой для буферизации содержимого файловых систем (параметры Cached и SwapCached файла /proc/meminfo в сумме), в столбце «Доступно» — количество памяти, доступной для резервирования (параметр MemAvailable файла /proc/meminfo).
Примеры использования
Получение информации об использовании оперативной памяти
Команда free может использоваться для получения информации об использовании оперативной памяти в любое время. По умолчанию все значения в килобайтах:
$ free
всего занято свободно общая буф./врем. доступно
Память: 2037684 1612460 197732 20768 227492 249148
Подкачка: 2098172 1123916 974256
Очевидно, что на данном компьютере активно используется раздел подкачки, что негативно отражается на его производительности.
Вывод с использованием значений в мегабайтах, на мой взгляд, более удобный:
$ free —mega
всего занято свободно общая буф./врем. доступно
Память: 2086 1649 209 21 227 257
Подкачка: 2148 1149 998
А это удобный для чтения человеком формат с единицами измерения:
$ free -h
всего занято свободно общая буф./врем. доступно
Память: 1,9Gi 1,5Gi 232Mi 20Mi 189Mi 243Mi
Подкачка: 2,0Gi 1,1Gi 944Mi
В большинстве случаев затраты оперативной памяти можно оценить, не используя каких-либо параметров.
Отслеживание состояния оперативной памяти
Для отслеживания состояния оперативной памяти следует использовать команду free с параметром -s и значением длительности периода перед обновлением информации в секундах:
$ free -s 1
всего занято свободно общая буф./врем. доступно
Память: 2037684 1621476 103508 18544 312700 242728
Подкачка: 2098172 1112164 986008
всего занято свободно общая буф./врем. доступно
Память: 2037684 1622484 102500 18544 312700 241732
Подкачка: 2098172 1112164 986008
всего занято свободно общая буф./врем. доступно
Память: 2037684 1622484 102500 18544 312700 241732
Подкачка: 2098172 1112164 986008
всего занято свободно общая буф./врем. доступно
Память: 2037684 1622468 102500 18544 312716 241748
Подкачка: 2098172 1112164 986008
Очевидно, что теперь утилита периодически выводит информацию о состоянии оперативной памяти. В этом случае работа утилиты завершается с помощью комбинации клавиш CTRL+C.
Разбираем команду free: что должен знать администратор Linux
Для тех, кто не использует или не любит дистрибутивы Linux семейства RHEL, следует ориентироваться на версии ядра. В случае, когда мы говорим RHEL 6, то имеется в виду ядро 2.6.32 и ниже. Если говорим о RHEL 7/8, то 3.10 и выше.
Отвечая на вопрос «зачем». Как оказалось, у многих даже давно занимающихся администрированием Linux знания об использовании данной команды остались на уровне времён ядер 2.6.32. В то время как в новых ядрах, очень многие фичи были или инвертированы или же сильно изменены. И многие люди про это не в курсе.
Оригинал статьи лежит здесь. На случай, если кто-то мой перевод сочтёт негодным. 🙂
Разбираем команду free: что должен знать администратор Linux
Команда free популярна среди системных администраторов Unix/Linux. Это серьёзный инструмент, дающий полное представление об использовании памяти в ясном для человека виде.
В man странице про данную команду сказано, что free отображает общее количество свободной и используемой памяти в системе, включая пространство подкачки и физической памяти, а также буферы с кешами используемые ядром операционной системы. Данная информация собирается путём разбора содержимого /proc/meminfo.
Как и другие команды, free прошла через череду изменений на протяжении своего существования, дабы вывод её был осмысленным и точным, что требуется для дальнейшего принятия решений. В RHEL 6 вывод утилиты free ощутимо отличается от вывода такового на RHEL 7 или 8. Впрочем, ключевые параметры остаются неизменными в любой версии.
Если вы наберёте free -h в RHEL 6 (я использовал ключ -h для вывода в удобном для человека виде), то вывод будет похож на этот:
]# free -h
total used free shared buffers cached
Mem: 94G 44G 49G 161M 993M 1.3G
-/+ buffers/cache: 42G 52G
Swap: 15G 0B 15G
В RHEL 7/8 вывод выглядит иначе:
]# free -h
total used free shared buff/cache available
Mem: 15G 751M 1.2G 272M 13G 14G
Swap: 0B 0B 0B
В то же время, в RHEL 8 всё будет выглядеть следующим образом:
]# free -h
total used free shared buff/cache available
Mem: 819Mi 164Mi 146Mi 25Mi 509Mi 491Mi
Swap: 0B 0B 0B
Дабы сделать вывод программы более понятным для восприятия, в команде предусмотрены следующие опции: free -b, -k, -m, -g. Они отображают количество памяти в байтах, килобайтах, мегабайтах и гигабайтах. Также вы можете использовать команду free -h для отображения вывода в удобном, понятном для человека виде. Если нужны подробности, запустите free —help для дополнительной справки по возможностям программы.
Различные столбцы, показанные в разных версиях выше, указывают на общую доступную память (total), использованную (used), свободную (free), разделяемую (shared) память. Помимо этого, в выводе отображается память, расположенная в данных момент в буферах и кешах операционной системы.
Впрочем, как и в случае с большинством других команд, необходимые для устранения проблем или выполнении служебных обязанностей системному администратору столбцы вывода команды будут рассмотрены далее.
Red Hat Enterprise Linux 6
В случае с RHEL 6, сфокусироваться следует на столбцах -/+ buffers/cache. На рис. 1 выше мы видим, что общее количество памяти равно 94 гигабайтам, где израсходовано 44 гигабайта и свободно 49 гигабайт. Вообще, это довольно нагруженная система и потребление памяти в ней выглядит высоким. Волноваться не стоит, хотя всё же следует посмотреть на столбец в -/+ buffers/cache. Данное значение показывает занятые 42 гигабайта и свободные 52 Гб. Это означает, что в реальности используется всего 42 гигабайта, а не 44. Значение задействованных 44 гигабайт включает себя ещё и кеши. Заметьте, даже простой взгляд на значение колонки used без учёта значения занятых кешей уже влияет на интерпретацию оценки производительности системы.
Теперь разберём смысл колонок со значениями буферов и кешей:
· buffers: память задействованная буферами ядра
· cached: память занятая “Page Cache” (страничным кешем).
Страничный кеш — не что иное, как данные / файлы, копируемые в оперативную память, в момент когда ядро операционной системы выполняет операции чтения или записи на диске. Причина тому — производительность операций ввода-вывода. Таким образом, ядро держит эти файлы в ОЗУ и высвобождает их в тот момент, когда они не требуются или когда пространство памяти запрашивается какой-либо командой или процессом в случае отсутствия свободной памяти в системе.
Red Hat Enterprise Linux 7/8
В операционных системах RHEL 7/8 уже следует сместить фокус на колонку available, поскольку колонка -/+ buffers/cache была удалена и заменена столбцом available. В то же время, столбцы buffers и cache были объединены в единое значение buff/cache и имеют ровно тот же смысл, что и ранее. Столбец available показывает оценку сколько памяти доступно приложениям без использования подкачки.
Так когда сисадмину всё же следует начать беспокоиться?
Исправна та система, которая показывает максимально возможный объём памяти достаточный для выполнения каких-либо задач, при этом демонстрирующая следующие ожидаемые признаки нормальной работы:
· Значение free близко к 0 или имеет очень небольшие значения
· Значение used близко к общему количеству RAM
· Значение доступной памяти в available (или же описанная в столбцах free -/+ buffers/cache) является относительно большой в сравнении с общим количеством памяти.
· Размер раздела или файла подкачки не меняется
Однако, системному администратору стоит начать беспокоиться, когда появляются следующие признаки реальной нехватки памяти:
· Значение столбца available (или же столбцов free -/+ buffers/cache) близко к нулю или весьма небольшое.
· Размер подкачки начинает расти или меняться из-за того, не хватает свободных страниц памяти и теперь необходимо их сбрасывать на диск
· В dmesg появляются сообщения об OutOfMemory-killer, которые проверяются командой grep -i kill /var/log/messages* или же dmesg | grep oom-killer.
Подведение итогов
Команда free — полезный инструмент, которая может очень рассказать системному администратору о том, что происходит в системе. Знание о различиях в выводе free может помочь в более точной интерпретации выдаваемых данных.
unixforum.org
стратегия любой современной операционной системы такова, что имеющуюся память нужно использовать максимально. чем будет больше выделено под программы, тем меньше останется на буферы и кэш. в linux более подробно про память есть в /proc/meminfo
Re: Решено: Что показывает утилита free?
Re: Решено: Что показывает утилита free?
Сообщение vr13 » 13.06.2009 13:13
вся память (которая не free) — реально работающая: просто назначение у нее разное:
buffers — кэш дискового ввода-вывода (очевидно понятно)
cached — кэш программ (что-л, например, firefox, будучи единожды запущенным, при последующих не будет читать с диска свой код и используемые разделяемые библиотеки — это в хранится в памяти. кстати, при запуске еще одной копии firefox тоже будет использоваться уже существующий в cached-памяти код)
тут говорится, что используется 2093612, из которых под буферы 356148 и под кэш 1184924. следовательно, под программы 2093612-356148-1184924=552540. кстати, виртуальная память есть на самом деле оперативная (за вычетом того, что занимает ядро системы) плюс swap
графические визуализации — просто для удобства пользователя, дает т.н "общую картинку". есть ли консольные не знаю, top разве что. для деталей и анализа — free, ps, полезный набор — в sysstat (sar,vmstat)