
1. Краткое содержание
Иногда возникает необходимость проверить общий объём памяти сервера, на котором запущена ОС Linux, или же данные о памяти требуются для сценариев командной оболочки. К счастью, есть множество инструментов, которые нам в этом помогут. В этом руководстве приводятся различные команды и утилиты для определения общего объёма физической памяти.
2. Команда free
free — самая простая в использовании команда из подборки. С её помощью выводятся данные по использованию физической и SWAP-памяти — по умолчанию в стандартном потоке вывода. Команда free — один из самых распространённых способов быстро проверить объём оперативной памяти, поскольку она доступна в большинстве дистрибутивов Linux. Достаточно ввести её в терминале без всяких флагов:$ free
total used free shared buff/cache available
Mem: 8021048 1320432 5689744 335556 1010872 6121932
Swap: 0 0 0
Как видите, объём физической памяти указан в байтах. Однако, эти же данные можно вывести в удобочитаемом формате, добавив флаг
-h или –human:$ free -h
total used free shared buff/cache available
Mem: 7.6Gi 1.3Gi 5.4Gi 318Mi 985Mi 5.8Gi
Swap: 0B 0B 0B
Как видно из полученных результатов, общий объём оперативной памяти составляет 7,6 ГБ. Есть и другие опции, с помощью которых можно привести выводимые данные в нужный формат:
–kilo, –mega, –Giga и так далее. Ещё есть интересная опция -s:$ free -h -s 5
Флаг
-s обозначает секунды, и в этом случае команда free выведет данные об использовании оперативной памяти за каждые пять секунд. Опция особенно полезна, если отслеживать использование памяти нужно с заданным интервалом. Останавливается процесс сочетанием горячих клавиш Ctrl +C.3. Команда vmstat
Как и команда
free, vmstat (статистика виртуальной памяти) также доступна в большинстве дистрибутивов Linux. По умолчанию при выполнении команды vmstat выводятся данные о свободной памяти, памяти используемой в качестве буферов и кэша, SWAP-памяти, использовании процессора, блочных устройств и системы в целом:$ vmstat -w
--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 5352900 56816 1053708 0 0 162 73 328 1087 18 4 78 0 0
Флаг
-w или –wide позволяет отобразить результат в развёрнутом, удобном для чтения формате. Поскольку нас интересует общий объём оперативной памяти, добавим флаг -s или –stats:$ vmstat -s
8021048 K total memory
1564516 K used memory
305336 K active memory
1962636 K inactive memory
5391588 K free memory
58224 K buffer memory
1006720 K swap cache
0 K total swap
0 K used swap
0 K free swap
76393 non-nice user cpu ticks
5 nice user cpu ticks
14122 system cpu ticks
337834 idle cpu ticks
1790 IO-wait cpu ticks
1463 IRQ cpu ticks
614 softirq cpu ticks
0 stolen cpu ticks
617253 pages paged in
310410 pages paged out
0 pages swapped in
0 pages swapped out
1426200 interrupts
4722588 CPU context switches
1625563254 boot time
1949 forks
Первая запись в результатах — общий объём памяти RAM. Если нужны не все данные, можно использовать
grep для получения только требуемой записи:$ vmstat -s | grep -i 'total memory' | sed 's/ *//'
8021048 K total memory
4. Команда top
top представляет собой диспетчер задач в виде командной строки с выводом в режиме реального времени. С её помощью можно просмотреть активные процессы в виде удобной таблицы. Также она выводит данные по использованию процессора, оперативной памяти и системы в целом. Чтобы запустить такой диспетчер задач, достаточно выполнить команду top:$ top
top - 15:18:13 up 57 min, 1 user, load average: 3.40, 3.26, 2.04
Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie
%Cpu(s): 17.2 us, 3.6 sy, 0.0 ni, 77.5 id, 0.3 wa, 0.9 hi, 0.5 si, 0.0 st
MiB Mem : 7833.1 total, 4665.9 free, 1782.3 used, 1384.8 buff/cache
top - 15:18:49 up 57 min, 1 user, load average: 2.61, 3.08, 2.03
Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie
top - 15:18:58 up 58 min, 1 user, load average: 2.45, 3.02, 2.02
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 5324.5 avail Mem
Вверху, рядом с полем
Mem, приводятся данные по физической памяти: общий объём RAM 7833 МБ.5. Утилита dmidecode
Утилита
dmidecode в удобочитаемом формате выводит сведения об аппаратных ресурсах: спецификации, серийные номера, версии BIOS. Данные по оборудованию извлекаются из таблицы DMI. С помощью утилиты можно получить ценные сведения о системе, например, максимальный объём поддерживаемой памяти.5.1. Установка dmidecode
Утилита
dmidecode не на всех дистрибутивах Linux установлена по умолчанию, так что начнём с её установки. Установить dmidecode можно непосредственно из репозитория дистрибутива с помощью менеджера пакетов.В дистрибутивах, основанных на Ubuntu, возможна установка пакета с помощью инструмента
apt:# apt install dmidecode
Для RHEL, Fedora и CentOS можно использовать
yum:# yum install dmidecode
Если дистрибутив основан на Arch, с этой задачей справится
pacman:# pacman -Sy dmidecode
5.2. Использование dmidecode
Как только установка завершена, выполним команду
dmidecode из терминала:# dmidecode
Чтобы выполнить
dmidecode, нам потребуются корневые привилегии. После выполнения мы получим подробные сведения об аппаратных ресурсах. Будет много данных по оборудованию, но нас интересует только общий объём памяти.К счастью, мы можем добавить к команде опцию
–type и указать интересующие нас компоненты: BIOS, память, процессор, температуру и так далее. Опция –type требует введения номера типа записи DMI.В нашем случае это запись DMI о памяти, и получить к ней доступ можно, введя следующие значения: 5, 6, 16, 17, 18, 19, 20, 21 и 22. Из этого перечня выбираем 19, поскольку именно так обозначаются устройства оперативной памяти, подключённые к материнской плате:
# dmidecode --type 19
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.0.0 present.
Handle 0x0049, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x00000000000
Ending Address: 0x001FFFFFFFF
Range Size: 8 GB
Physical Array Handle: 0x0044
Partition Width: 1
Из результатов следует, что у нас только один модуль RAM размером 8 ГБ, установленный в один из слотов для оперативной памяти.
6. Виртуальный файл /proc/meminfo
Директория
/proc относится к особому типу директорий, содержащих виртуальные файлы. Эти виртуальные файлы позволяют заглянуть в ядро, процессы и конфигурации Linux. Они не занимают места на диске, поскольку создаются непосредственно в момент обращения к ним. Для чтения некоторых требуются корневые привилегии.В директории
/proc есть особый файл под названием meminfo, прочесть который можно командами cat и less. Среди прочих полезностей там содержатся и данные об объёме физической памяти. Давайте заглянем в файл /proc/meminfo с помощью cat:$ cat /proc/meminfo
В примере использована команда
cat — удобная утилита для чтения из файла или стандартного потока ввода. При выполнении эта команда прочтёт файл /proc/meminfo и представит обширные сведения о физической памяти. Нас интересует только общий объём оперативной памяти, который указан в первых трёх строках результата.$ cat /proc/meminfo | head -n 3
MemTotal: 8021048 kB
MemFree: 4542960 kB
MemAvailable: 5155668 kB
Мы ограничили вывод интересующими нас строками с помощью команды
head. В сочетании с аргументом -n команда head задаёт количество строк результата. Размер памяти приводится в килобайтах и даёт понимание общего объёма физической памяти, а также свободного и доступного объёма.Предположим, что мы пишем скрипт для командной оболочки Bash, и в нём фигурирует объём физической памяти RAM. Чтобы его туда добавить, можем выполнить чтение файла
/proc/meminfo, а затем с помощью grep извлечь общий объём памяти.#!/bin/bash
total_ram () {
local totalram=$(cat /proc/meminfo | grep -i 'memtotal' | grep -o '[[:digit:]]*')
echo $totalram
}
ram_size=$(total_ram)
echo "Total RAM: $ram_size kB"
Теперь сохраним скрипт и сделаем его исполняемым:
$ chmod +755 totalram.sh
$ ./totalram.sh
Total RAM: 8021048 kB
7. Использование диспетчеров задач с графическим пользовательским интерфейсом
Отслеживать работу процессора, использование оперативной памяти и сетевых ресурсов, а также управлять процессами можно с помощью широкого ряда диспетчеров задач с графическим интерфейсом. Рассмотрим самые популярные варианты для Linux.
7.1. GNOME System Monitor
GNOME System Monitor входит в состав среды рабочего стола GNOME как диспетчер задач по умолчанию. А пользователи другой рабочей среды с лёгкостью могут найти пакет
gnome-system-monitor в репозитории с дистрибутивом. После установки можно запустить диспетчер из командной строки:$ gnome-system-monitor

Среди сведений на вкладке
Resources найдётся и общий объём памяти.7.2. KSysGuard
KSysGuard — диспетчер задач, разработанный сообществом KDE как дефолтный для свободной среды рабочего стола KDE. Аналогичным образом, если вы используете другую рабочую среду, его несложно установить в системе с помощью пакета
ksysguard в соответствующем репозитории. Запустить его после установки можно командой ksysguard:$ ksysguard

Открыв
ksysguard, перейдём на вкладку System Load. Данные о памяти там представлены вместе с наглядным графиком.8. Заключение
В этой статье мы рассмотрели различные команды и инструменты, с помощью которых можно выяснить объём физической памяти системы под управлением Linux.
Мы изучили базовую команду
free и её альтернативу vmstat. Затем узнали, как с помощью команды top можно получить различные системные данные. Также взглянули на утилиту dmidecode и выяснили, как извлечь данные о физической памяти из таблицы DMI.Ознакомились с директорией
/proc и научились читать файл /proc/meminfo, чтобы выяснить общий объём памяти RAM и использовать его в скрипте для оболочки Bash. И наконец, перечислили пару графических диспетчеров задач, показав, как с их помощью просмотреть объём и статистику использования оперативной памяти.НЛО прилетело и оставило здесь промокоды для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.
Комментарии (15)

litos
04.02.2022 12:48+2Кстати, есть хороший сайт, рассказывающий про кэш и куда могла деться оперативная память https://www.linuxatemyram.com/

CentALT
04.02.2022 12:51+3lshw покажет все банки памяти производителя и пр.
*-memory описание: Системная память физический ID: e слот: Системная плата или материнская плата размер: 16GiB *-bank:0 описание: SO-DIMM DDR4 Синхронная 2667 MHz (0,4 ns) продукт: M471A-CTD производитель: Samsung физический ID: 0 серийный №: 00000001 слот: ChannelA-DIMM0 размер: 8GiB разрядность: 64 bits частота: 2667MHz (0.4ns) *-bank:1 описание: SO-DIMM DDR4 Синхронная 2667 MHz (0,4 ns) продукт: M471A-CTD производитель: Samsung физический ID: 1 серийный №: 00000001 слот: ChannelB-DIMM0 размер: 8GiB разрядность: 64 bits частота: 2667MHz (0.4ns)

saboteur_kiev
04.02.2022 15:28+3local totalram=$(cat /proc/meminfo | grep -i 'memtotal' | grep -o '[[:digit:]]*')Три процесса вместо одного
local totalram=$(grep -Po 'MemTotal: \K[[:digit:]]' /proc/meminfo)
Self_Perfection
05.02.2022 00:42Ваш вариант не работает. Но я смог исправить
grep -Po 'MemTotal: *\K[0-9]+' /proc/meminfo

AnyKey80lvl
05.02.2022 10:16+1Точно. На SO однажды вычитал фразу, поразившую глубиной, запомнил:
Advices from catgreppers should generally be avoided

event1
04.02.2022 18:21+4$ cat /proc/meminfo | head -n 3head (как и grep) принимает имя файла в качестве аргумента, по-этому:
head -n 3 /proc/meminfo

Tujh
04.02.2022 19:34+1Для RHEL, Fedora и CentOS можно использовать
yumСмотрю на год выхода статьи...да ладно...
В Fedore DNF стандартно заменил YUM 7 лет назад (с 2015 года), в RHEL, начиная с RHEL/CentOS 8 (с 2019 года). Я понимаю, что многие до сих пор сидят на CentOS7, но для таких статья "как узнать объём RAM" будет, мягко говоря, бесполезна, они сами могут ещё пару-тройку способов автору подкинуть.

Mingun
05.02.2022 08:17Как-то вы слишком категоричны. Что же, думаете на CentOS7 «сидят» только бородатые дядьки, которые его настраивали, когда мы с вами ещё под стол пешком ходили? Не далее двух месяцев назад пришлось разбираться с настройкой окружения на боевом сервере с Linux (как выяснилось, это был Oracle Linux 7, но по сути это тот же RHEL7). До этого дел с серверными Linux'ами не имел. При этом его предоставили по принципу — вот вам машина с (каким-то) Linux'ом, а дальше вы сами. Что же, по вашей логике я тоже должен уметь «пару-тройку способов автору» подкидывать?

Tujh
04.02.2022 19:36+1Если упомянуты диспетчеры задач для GUI, почему не упомянут мега популярный аналог для TUI - htop?

DirectoriX
04.02.2022 21:55Так написали же про top, а если перечислять аналоги, то и atop надо вспомнить, и nmon, и вообще целая статья была про всевозможные мониторилки…

A1EF
06.02.2022 10:49Как видите, объём физической памяти указан в байтах.
man freeговорит иное:-k, --kibi Display the amount of memory in kibibytes. This is the default.
bliznezz
[x] корневые привилегии