Поиск по сайту:

Как проверить использование памяти из терминала Linux


Существует множество способов получить сведения об использовании памяти в вашей системе Linux. В этом обзоре мы рассмотрим наиболее часто используемые методы командной строки: free, vmstat и top. Мы также рассмотрим непосредственное чтение /proc/meminfo.

Как Linux использует оперативную память

Оперативная память — это ограниченный ресурс, часть которого требуется всем процессам, таким как приложения и демоны. Его так много доступно. Ядро решает споры о памяти и распределяет нормированную память всем голодным процессам. Это похоже на птицу-мать, у которой больше открытых клювов направлено на нее, чем у нее есть личинка.

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

Обычно это просто ядро, упорно выполняющее свою работу в фоновом режиме. Если есть другие требования к ОЗУ, которое ядро переманило для своих собственных устройств, оно немедленно освобождает память, так что никакого вреда не будет.

Если ядро решает, что более эффективно начать использовать пространство подкачки, оно также вводит это в игру. Существует много путаницы со значением swappiness в Linux и когда ядро начнет использовать swap. Неправда, что значение swappiness устанавливает порог использования ОЗУ, при котором включается подкачка.

Но теперь давайте рассмотрим различные методы, которые вы можете использовать в окне терминала, чтобы увидеть использование оперативной памяти на вашем компьютере с Linux.

Бесплатная команда

Команда free дает вам таблицу общей, используемой, свободной, общей, буферной/кэш-памяти и доступной оперативной памяти на вашем компьютере. Он также показывает общий объем настроенного пространства подкачки, а также сколько используется и доступно.

В нашем примере мы будем использовать параметр -m (мебибайты). Однако вы также можете использовать -b (байты), -k (кибибайты) или -g (гибибайты).

Набираем следующую команду:

free -m

Это вывод, который мы получаем:

      total used free shared buff/cache available
Mem:   1987  901   95     80        990       811
Swap: 1521   651  869

Столбцы Mem содержат следующую информацию:

  • Всего: общий объем физической оперативной памяти на этом компьютере.
  • Использовано: сумма Free+Buffers+Cache, вычтенная из общей суммы.
  • Свободно: объем неиспользуемой памяти.
  • Общая: объем памяти, используемый файловой системой tmpfs.
  • Buff/cache: объем памяти, используемый для буферов и кеша. При необходимости это может быть быстро выпущено ядром.
  • Доступно. Это оценка памяти, доступной для обслуживания запросов памяти от приложений и любого другого рабочего программного обеспечения на вашем компьютере.

Столбцы Swap содержат следующую информацию:

  • Всего: размер раздела подкачки или файла.
  • Используется: объем используемого пространства подкачки.
  • Свободно: объем оставшегося (неиспользованного) пространства подкачки.

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

free -m | grep Swap | awk '{print ($3/$2)*100}'

Команда vmstat

Невозможно иметь хорошее представление о том, как используется оперативная память в вашем Linux-компьютере, без оценки состояния вашего пространства подкачки. ОЗУ и пространство подкачки тесно взаимодействуют друг с другом.

Вы можете использовать команду vmstat, чтобы более подробно изучить, как используется пространство подкачки (или виртуальная память). Он предоставляет отчет о различной статистике, связанной с подкачкой, на основе средних значений с момента последней перезагрузки.

Введите следующее:

vmstat

Это вывод без переноса:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b    swpd    free  buff   cache   si  so    bi   bo    in   cs  us sy id wa st
3 0  671488  576084  51088  823876   1   7    53   62    99   14   4  1 95  0  0

В этом отчете много точек данных, поэтому мы разберем их:

  • r: количество «запускаемых» процессов. Они либо запущены, либо ждут следующего кванта циклов ЦП с разделением по времени.
  • b: количество процессов в непрерывном спящем режиме. Они не спят, а выполняют блокирующий системный вызов. Их нельзя прервать, пока они не завершат свое текущее действие. Как правило, этот процесс представляет собой драйвер устройства, ожидающий освобождения некоторого ресурса. Любые прерывания в очереди для этого процесса обрабатываются, когда процесс возобновляет свою обычную деятельность.

  • swpd: объем используемой виртуальной памяти, т. е. объем выгруженной памяти.
  • свободно: объем свободной (неиспользуемой) памяти.
  • buff: объем памяти, используемый в качестве буферов.
  • кэш: объем памяти, используемый в качестве кеша.

  • si: объем виртуальной памяти, выгружаемой из пространства подкачки.
  • so: объем виртуальной памяти, выгруженной в пространство подкачки.

  • bi: Блоки. Количество блоков данных, используемых для переключения виртуальной памяти обратно в ОЗУ.
  • bo: блокирует. Количество блоков данных, используемых для свопинга виртуальной памяти из ОЗУ в пространство подкачки.

  • in: количество прерываний в секунду, включая часы.
  • cs: количество переключений контекста в секунду. Переключение контекста происходит, когда ядро переключается с системного режима на обработку пользовательского режима.

  • нас: время, потраченное на выполнение пользовательского (неядерного) кода.
  • sy: время, затраченное на выполнение кода ядра.
  • id: время простоя.
  • wa: время ожидания ввода или вывода.
  • st: время, которое виртуальная машина должна ждать, пока гипервизор завершит обслуживание других виртуальных машин, прежде чем она сможет вернуться и заняться этой виртуальной машиной.

Верхняя команда

Команда top отображает экран, заполненный информацией. Значения обновляются каждые несколько секунд.

Чтобы использовать его, мы набираем следующее:

top

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

Вот информация, которую вы найдете в каждой строке:

  • Первая строка: время, продолжительность работы компьютера, количество пользователей, вошедших в систему, и средняя загрузка за последние 1, 5 и 15 минут.< /li>
  • Вторая строка: количество задач и их состояния: выполняется, остановлено, находится в спящем режиме или зомби.
  • Третья строка: информация о ЦП (см. разбивку полей ниже).
  • Четвертая строка: общий объем физической памяти, а также объем свободной, используемой, буферизованной или кэшированной памяти.
  • Пятая строка: общий объем памяти подкачки, а также объем свободной, используемой и доступной памяти (с учетом памяти, которая, как ожидается, может быть восстановлена из кешей).

Поля CPU в третьей строке выглядят следующим образом:

  • нас: время, затрачиваемое ЦП на выполнение процессов для пользователей в пользовательском пространстве.
  • sy: время, затраченное ЦП на выполнение системных процессов «пространства ядра».
  • ni: время, затраченное ЦП на выполнение процессов с установленным вручную значением nice.
  • id: время простоя ЦП.
  • wa: время, которое ЦП тратит на ожидание завершения ввода-вывода.
  • привет. Время, затраченное ЦП на обслуживание аппаратных прерываний.
  • si: время, затраченное ЦП на обслуживание программных прерываний.
  • st (steal time): время потери ЦП из-за работы виртуальных машин.

Возможно, вам придется нажимать клавиши со стрелками влево или вправо, чтобы увидеть все столбцы. Значения в каждом столбце описаны ниже:

  • PID: идентификатор процесса.
  • USER: имя владельца процесса.
  • PR: приоритет процесса.
  • NI: приятная ценность процесса.
  • VIRT: виртуальная память, используемая процессом.
  • RES: резидентная память, используемая процессом.
  • SHR: общая память, используемая процессом.
  • S: статус процесса. (См. список значений, которые может принимать это поле ниже).
  • %CPU: доля процессорного времени, используемого процессом с момента последнего обновления.
  • %MEM – используемая доля физической памяти.
  • TIME+: общее время ЦП, используемое задачей, в сотых долях секунды.
  • КОМАНДА: название или строка команды (имя + параметры). (Этот столбец находится за пределами экрана справа на изображении выше.)

Статус, отображаемый в столбце S, может быть одним из следующих:

  • D: Непрерывный сон.
  • Р: Бегу.
  • S: Спит.
  • T: Отслеживается (остановлено).
  • Z: Зомби.

Нажмите Q, чтобы выйти top.

Чтение /proc/meminfo

Многие (и, вполне вероятно, большинство) инструментов в Linux, которые сообщают статистику памяти, извлекают свою информацию из псевдофайловой системы /proc/meminfo. Мы можем использовать команды cat или less, чтобы сделать то же самое.

Набираем следующее:

less /proc/meminfo

Вы можете увидеть разные поля в зависимости от работающего ядра и архитектуры ЦП. На нашей виртуальной машине мы получили следующие результаты:

MemTotal:          2035260 kB
MemFree:            919064 kB
MemAvailable:      1300932 kB
Buffers:             33528 kB
Cached:             457604 kB
SwapCached:          29732 kB
Active:             313360 kB
Inactive:           603276 kB
Active(anon):        74648 kB
Inactive(anon):     355004 kB
Active(file):       238712 kB
Inactive(file):     248272 kB
Unevictable:            16 kB
Mlocked:                16 kB
SwapTotal:         1557568 kB
SwapFree:           873024 kB
Dirty:                  80 kB
Writeback:               0 kB
AnonPages:          414100 kB
Mapped:              97436 kB
Shmem:                4148 kB
KReclaimable:        52932 kB
Slab:                94216 kB
SReclaimable:        52932 kB
SUnreclaim:          41284 kB
KernelStack:          9280 kB
PageTables:          45264 kB
NFS_Unstable:            0 kB
Bounce:                  0 kB
WritebackTmp:            0 kB
CommitLimit:       2575196 kB
Committed_AS:      5072192 kB
VmallocTotal:  34359738367 kB
VmallocUsed:         35712 kB
VmallocChunk:            0 kB
Percpu:                720 kB
HardwareCorrupted:       0 kB
AnonHugePages:           0 kB
ShmemHugePages:          0 kB
ShmemPmdMapped:          0 kB
CmaTotal:                0 kB
CmaFree:                 0 kB
HugePages_Total:         0
HugePages_Free:          0
HugePages_Rsvd:          0
HugePages_Surp:          0
Hugepagesize:         2048 kB
Hugetlb:                 0 kB
DirectMap4k:        180160 kB
DirectMap2M:       1916928 kB

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

MemTotal: общий доступный объем оперативной памяти (кроме нескольких зарезервированных битов и двоичного кода ядра).

MemFree: сумма LowFree + HighFree. Объем оперативной памяти, доступный в настоящее время.

MemAvailable: предполагаемый объем памяти, доступный для запуска новых приложений без свопинга.

Буферы. Временное хранилище необработанных дисковых блоков. Это уменьшает ввод и вывод жесткого диска. Это также ускоряет доступ к последующим запросам тех же данных, поскольку они уже находятся в памяти.

Кэшированный: кэшированные страницы, прочитанные из файлов на жестком диске (не включая SwapCached).

SwapCached: память, которая была выгружена и возвращена, а копия осталась в пространстве подкачки.

Активно: недавно использованная память. Его не восстанавливают, если в этом нет крайней необходимости.

Неактивно: память, которая использовалась, но не использовалась последней. Это хороший кандидат на рекультивацию.

Активно(анонимно): память, выделенная для файлов, созданных в псевдофайловой системе tmpfs. Анонимные файлы не хранятся на жестком диске.

Inactive(anon): Объем анонимной памяти, памяти tmpfs и shmem, которая может быть удалена (восстановление памяти).

Активный(файл): объем памяти файлового кэша, который используется или использовался с момента предыдущего цикла высвобождения памяти.

Неактивный(файл): объем кэш-памяти файлов, прочитанный с жесткого диска, который является кандидатом на освобождение.

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

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

HighTotal: общий объем HighMem, который используется программами пользовательского пространства и кешем страниц. Ядро может получить доступ к этой зоне памяти, но это происходит медленнее, чем LowMem.

HighFree: количество бесплатных HighMem.

LowTotal: количество LowMem, которое доступно для всех тех же целей, что и HighMem, но также и для использования ядром в собственных целях.

LowFree: количество свободного LowMem.

MmapCopy: объем памяти, сопоставленный с данными файла.

SwapTotal: общий объем доступного пространства подкачки.

SwapFree: объем пространства подкачки, который в настоящее время не используется.

Грязный объем памяти, ожидающий обратной записи на диск.

Обратная запись: память активно записывается обратно на диск.

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

Сопоставленные: файлы (файлы pke), сопоставленные с памятью.

Shmem: объем памяти, потребляемый в псевдофайловых системах tmpfs.

KReclaimable: выделение памяти ядром, которое ядро попытается вернуть, если потребность в памяти достаточно высока.

Slab: кеш структур данных в ядре.

SReclaimable Объем памяти Slab, которая может быть восстановлена, например кэши.

SUnreclaim Объем памяти Slab, который не может быть восстановлен.

KernelStack: объем памяти, выделенный для стеков ядра.

PageTables: объем памяти, выделенный для нижнего уровня таблиц страниц.

Quickpsts: поскольку выделение и удаление таблиц страниц является очень частой операцией, крайне важно, чтобы она выполнялась как можно быстрее. Таким образом, страницы, используемые для таблиц страниц, кэшируются в нескольких различных PST, называемых «QuickPST».

NFS_Unstable: страницы сетевой файловой системы (NFS), полученные сервером, но еще не записанные в энергонезависимое хранилище.

Отказ. Память, используемая для буферов отскока блочного устройства. Буфер отскока размещается в памяти достаточно низко, чтобы устройство могло получить к нему прямой доступ. Затем данные копируются на нужную пользовательскую страницу в HighMem.

WritebackTmp: память, используемая файловой системой в пользовательском пространстве (FUSE) для временных буферов обратной записи.

Commitpmit: общий объем памяти, доступный в настоящее время для выделения в системе.

Committed_AS: предполагаемый объем памяти для удовлетворения всех текущих требований. Если программа запрашивает некоторое количество ОЗУ, запрос записывается, но ОЗУ выделяется только после того, как программа начинает его использовать. Он также выделяется только по мере необходимости, вплоть до максимальной суммы, зарезервированной программой. Может быть «выделено» больше памяти, чем фактически может быть выделено. Если все программы попытаются обналичить свои чипы оперативной памяти одновременно, казино с памятью может разориться (и ему придется идти на поводу у финансистов, занимающихся обменом пространства).

VmallocTotal: общий размер области памяти vmalloc.

VmallocUsed: объем используемой области vmalloc. Начиная с pnux 4.4 это поле больше не вычисляется, оно жестко запрограммировано.

VmallocChunk: самый большой непрерывный блок свободной области vmalloc.

HardwareCorrupted: объем памяти, помеченный как имеющий проблемы с физическим повреждением памяти. Он не будет выделен.

LazyFree: объем памяти в состоянии MADV_FREE. Когда приложение устанавливает флаг MADV_FREE для диапазона страниц, это означает, что они больше не требуются, и теперь они являются кандидатами на восстановление. Фактическое восстановление может быть отложено до тех пор, пока не возникнет достаточный спрос на память. Если приложение начинает записывать на страницы, восстановление можно отменить.

AnonHugePages. Огромные страницы, не поддерживаемые файлами, отображаются в таблицы страниц пользовательского пространства. Страницы, не поддерживаемые файлами, не были получены из файла на жестком диске.

ShmemHugePages: объем памяти, используемый общей памятью (shmem) и псевдофайловыми системами (tmpfs), выделенными для больших страниц.

ShmemPmdMapped: объем общей памяти, отображаемой в пользовательское пространство с огромными страницами.

CmaTotal: количество страниц CMA (распределителя непрерывной памяти). Они используются устройствами, которые могут обмениваться данными только со смежными областями памяти.

CmaFree: количество свободных страниц CMA (распределителя непрерывной памяти).

HugePages_Total: огромный размер пула страниц.

HugePages_Free: количество нераспределенных огромных страниц в пуле.

HugePages_Rsvd: количество зарезервированных огромных страниц. Обязательство по распределению было принято, но распределение еще не произошло.

HugePages_Surp: количество огромных страниц в пуле выше определенного системного значения.

Hugepagesize: размер огромных страниц.

DirectMap4k: количество байтов ОЗУ, сопоставленное со страницами размером 4 КБ.

DirectMap4M: количество байтов ОЗУ, сопоставленное со страницами размером 4 МБ.

DirectMap2M: количество байтов ОЗУ, сопоставленное со страницами размером 2 МБ.

DirectMap1G: количество байтов ОЗУ, сопоставленное со страницами размером 2 ГБ.

Как обычно в Linux, есть несколько способов получить краткий обзор, и всегда есть по крайней мере один способ углубиться в детали.

Вероятно, вы будете регулярно использовать free, top и vmstate и хранить /proc/meminfo в резерве для когда вам нужно сделать глубокое погружение, чтобы исследовать конкретную проблему.

RELATED: Best Linux Laptops for Developers and Enthusiasts