Как проверить использование памяти из терминала 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
в резерве для когда вам нужно сделать глубокое погружение, чтобы исследовать конкретную проблему.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts