Битлента
Windows, macOS, Android, iOS5 мин чтения·

free -h: как читать вывод и почему в Linux почти вся оперативная память «занята»

Как читать столбцы команды free -h в Linux: used, free, buff/cache, available и swap. Когда малое free нормально, а когда памяти действительно не хватает.

Кратко

В Linux малое значение free обычно нормально: свободную память система использует под кэш файлов. Смотрите на столбец available, он показывает, сколько можно выделить программам без обращения к подкачке. Тревожный признак — малое available и активная работа swap.

Почему «свободной» памяти почти нет

Новички часто пугаются, увидев в выводе free -h, что свободно всего несколько сотен мегабайт из многих гигабайт. На самом деле система работает именно так, как задумано. Linux использует незанятую оперативную память под кэш: хранит там недавно прочитанные файлы, чтобы при повторном обращении не ходить на диск. Пока программам эта память не нужна, она работает кэшем, а когда понадобится, ядро быстро освободит её.

Поэтому «свободная» (free) память — плохой показатель нехватки. Неиспользуемая оперативная память — это потраченная впустую возможность ускорить работу. Правильнее спрашивать не «сколько свободно», а «сколько можно отдать программам, если они попросят».

Этот вопрос и закрывает столбец available, который отдельно считает ядро. Он учитывает свободную память и ту часть кэша, которую можно освободить без потерь. Именно по нему оценивают, хватает ли памяти. Столбец появился в современных версиях программы; в очень старых выводах его нет, и тогда ориентируются на сумму free и буферов с кэшем, понимая, что это приблизительная оценка.

Столбцы free -h по одному

Типичный вывод содержит две строки: Mem (оперативная память) и Swap (подкачка). Значение столбцов объясняет таблица.

СтолбецЧто означает
totalобщий объём установленной памяти, доступной системе
usedзанято программами и ядром
freeсовсем не используется
sharedпамять, разделяемая между процессами, в том числе временные файловые системы в памяти
buff/cacheбуферы и кэш файлов, большая часть может быть освобождена
availableоценка памяти, которую можно выделить новым программам без подкачки

Ключ -h делает числа читаемыми: мегабайты и гигабайты вместо килобайт. Ключ -m выводит мегабайты, а -s 5 повторяет вывод каждые пять секунд, что удобно для наблюдения за динамикой.

Точное разбиение used и cache отличается между версиями программы и ядра, поэтому не пытайтесь сводить арифметику до мегабайта. Достаточно понимать порядок величин и тенденцию: растёт ли used со временем и падает ли available.

Как понять, что памяти действительно не хватает

Нехватку выдаёт не одна цифра, а сочетание признаков.

  • столбец available стабильно близок к нулю или составляет малую долю от total;
  • в строке Swap растёт используемый объём, а система становится вялой;
  • в журнале появляются записи о завершении процессов из-за нехватки памяти (OOM, out of memory);
  • программы падают или перестают отвечать при выполнении привычных задач.

Один лишь большой buff/cache проблемой не является. А вот активная подкачка — признак того, что система вытесняет данные из памяти на диск, и это заметно замедляет работу, особенно на обычных жёстких дисках. Наблюдать за подкачкой можно командой vmstat 5: столбцы si и so показывают объёмы, читаемые из подкачки и записываемые в неё; значения, постоянно отличные от нуля, говорят об интенсивной работе swap.

Следы нехватки памяти в журнале ищите по словам вроде «Out of memory» или «Killed process». Искать такие записи удобно через journalctl. Если ядро принудительно завершило процесс, это не сбой программы, а защитная мера системы.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Кто занимает память и что с этим делать

Когда available действительно мало, нужно найти потребителя. Порядок действий простой.

  1. Запустите top и нажмите Shift+M: список отсортируется по использованию памяти. Для сводки можно использовать ps aux --sort=-%mem | head. Ключ --sort относится к GNU-версии ps, в macOS он работает иначе.
  2. Посмотрите, какая программа лидирует и растёт ли её потребление со временем. Постоянный рост без возврата вниз намекает на утечку.
  3. Разберитесь, нужна ли эта программа сейчас. Остановить службу можно штатной командой, о которой рассказывает страница про systemctl; завершить зависшую — способами со страницы про kill.
  4. Если программа нужна и памяти правда мало, подумайте об уменьшении её настроек (например, числа рабочих процессов или размера кэша) или об увеличении оперативной памяти.

Не очищайте кэш «вручную» командами, которые встречаются в интернете, чтобы «освободить память»: это замедляет систему и не решает причину. Ядро и так отдаёт кэш по требованию. Подобные действия оправданы только при измерениях, когда вы точно знаете, что и зачем делаете.

Подкачка и особенности виртуальных серверов

Swap — область на диске, куда система выгружает редко используемые данные, чтобы освободить место для активных. Небольшое использование подкачки само по себе не говорит о беде: система может перенести туда давно не нужные страницы. Тревожит активное чтение и запись подкачки при работе.

Наличие и размер swap определяются настройкой системы. Проверить, есть ли она, можно командой swapon --show. Некоторые серверы настроены без подкачки, и тогда при нехватке памяти ядро быстрее прибегает к завершению процессов. Что лучше для вашей задачи, зависит от нагрузки, и универсального числа тут не существует, поэтому изменяйте настройки осознанно и по документации дистрибутива.

На виртуальных серверах и в контейнерах цифры free могут отражать не вашу долю. Контейнер часто ограничен настройками группы управления ресурсами, а free показывает память всей машины. Если программа в контейнере внезапно завершается при «свободной» памяти, проверьте лимиты контейнера в его настройках.

В macOS команды free нет: аналогичные сведения даёт Activity Monitor, вкладка «Память», где вместо available смотрят на давление памяти.

Как проверять память регулярно и спокойно

Единичный снимок free -h мало что говорит. Полезнее наблюдать картину в динамике: запустите free -h -s 5 во время обычной работы и посмотрите, как меняются used и available. Если значения колеблются в разумных пределах, причин для беспокойства нет.

Для долгого наблюдения на сервере заведите простую запись показаний в файл раз в несколько минут через планировщик и посмотрите график или таблицу после очередного сбоя. Так вы отличите постоянный рост потребления от разового всплеска. Не доверяйте единственному измерению, снятому в момент пика, и не сравнивайте цифры с чужими системами: нужный запас зависит от того, какие программы работают именно у вас.

Если памяти действительно мало и нагрузка типична, самое надёжное решение — добавить оперативную память или перенести тяжёлую службу на отдельный сервер. Менять системные параметры ядра вслепую по рекомендациям из интернета не стоит: без измерений они чаще вредят, чем помогают.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
linuxпамятьfreeswap

Часто задаваемые вопросы

Читайте также