Пять команд для проверки оперативной памяти в Линукс
Помните, когда-то на канале выходил материал по командам для проверки жестких дисков на Линукс-серверах? Если не помните, то можете пройти по прикрепленной ниже ссылке и прочитать.
Вторым не менее важным элементом в работе сервера является оперативная память. У нее есть одно свойство — она может заканчиваться, что в результате приводит к сбоям в работе сервера. Поэтому давайте узнаем какими командами можно следить за оперативной памятью.
Чтобы получить уведомления о выходе новых заметок подпишитесь на обновления канала Просто Код в Телеграме.
Команда free
Начнем с базовой команды, которая одновременно и является утилитой в Linux. Использование ее просто, достаточно в терминале ввести free.
Использование ключей упрощает восприятие выводимой информации. Используйте ключ -m чтобы показать данные в мегабайтах, ключ -g в гигабайтах, ключ -b в байтах, ключ -k в килобайтах, ключ -h делает вывод удобным для чтения человеком (человекопонятным).
Теперь поговорим про то, что обозначают выводимые столбцы:
- total — общий объем оперативной памяти
- used — объем оперативной памяти, который использует Linux
- free — количество не задействованной оперативной памяти
- shared — столбец можно игнорировать, так как он полезен только для обратной совместимости
- buff/cache — объединенная оперативная память, которая используется буферами ядра, кэшем страниц и пр., эту память могут использовать приложения, если им это необходимо
- available — количество оперативной памяти, доступной для запуска новых приложений без необходимости замены.
- swap — этот столбец показывает размер файла подкачки
Столбец used рассчитывается следующим путем:
used = total — free — buffers — cache
Особенностью Линукс является привычка кэшировать большое количество всего, чтобы в случае необходимости не загружать что-то заново, а воспользоваться сохраненной версией.
Команда cat /proc/meminfo
С командой cat мы уже знакомились в статье про работу с файлами. Про папку /proc мы тоже читали в статье про системные папки корневого раздела Linux. Внизу прикреплю две этих статьи, чтобы прочитать их или освежить материал в памяти.
В папке /proc размещается динамический файл meminfo, содержимое которого мы и будем считывать командой cat.
«Выхлоп» у команды большой, но нас интересуют строки MemTotal, MemFree, Buffers, Cached, SwapTotal и SwapFree. Они соответствуют тем же значениям, которые мы получили после ввода команды free.
Команда vmstat
Ввод этой команды позволяет не только отследить использование оперативной памяти, но и получить дополнительную информацию о том, что ее использует.
Данных опять-таки много, хотя, в отличии от предыдущей команды они и скомпонованы на экране получше. Нас будут интересовать только первые три.
- r отображает число запущенных процессов, это те, которые работают или которые ожидают выполнения.
- b отображает число «спящих» процессов.
- swpd отображает объем используемой виртуальной памяти.
- free показывает объем свободной памяти.
- buff показывает количество памяти, используемой в качестве буферов.
- cache показывает объем памяти, используемой в качестве кеша.
- inact/active показывают количество неактивной/активной памяти.
- si показывает объем оперативной памяти, выгруженный с диска.
- so показывает объем объем памяти, перенесенный на диск.
Можно использовать при вводе команды ключ -s, который выведет в начале только то, что напрямую относится к оперативной памяти.
Команда top
Утилита выводит информацию о используемой оперативной памяти и загрузку процессора для каждого запущенного в системе процесса. Помимо этого «выхлоп» поможет нам получить информацию об общем использовании памяти и контролировать его.
Как видим, вывод команды уже представлен в псевдографическом виде. Нас интересует верхние строки, содержащие слова Mem и Swap. В них же находятся те данные, которые мы получали использованием команды free.
Команда htop
Это «прокачанный» вариант top, но его нужно устанавливать отдельно. Пакет этот имеется во всех популярных дистрибутивах, потому проблем возникнуть не должно. На моем сервере установлен Debian 11, потому для установки htop нужно ввести команду
sudo apt install htop
После можно вводить основную команду и смотреть то, что она покажет.
Вывод намного приятнее, чем у top, обратите внимание на верхние строки: в них показывается нагрузка на ядра процессора, ниже данные по оперативной памяти. Также справа видим количество запущенных процессов, нагрузку системы и время ее непрерывной работы. Внизу расположены горячие клавиши, при помощи которых можно управлять процессами.
Мой выбор
Из описанных выше команд я предпочитаю free, она простая в использовании и дает сразу необходимые данные. Если сервер используется мной на постоянной основе (не для какой-либо разовой процедуры), то уже устанавливаю htop, который чаще использую для отслеживания прожорливых процессов. Опять-таки htop конкретно для работы с оперативной памятью и ее мониторингом практически не использую.
В комментариях подписчики и читатели канала могут рассказать о своих предпочтениях в плане утилит для мониторинга оперативной памяти на Linux-серверах. Может узнаю что-нибудь нового в плане команд и утилит.
Призываю активно участвовать в жизни канала: подписываться, комментировать, лайкать. Чем больше активностей, тем быстрее посты попадут в рекомендации Дзена. Также приглашаю подписаться на обновления Просто Код в Телеграме , чтобы получать уведомления о выходе новых заметок.
Как узнать количество памяти в Linux, Ubuntu
Как можно узнать количество оперативной памяти (свободной, занятой, всего) в Linux (debian, ubuntu и пр.)?
Вы можете использовать следующие команды в терминале, чтобы выяснить реальный размер RAM под Linux, либо удаленно по ssh для сервера с Linux.
Файл /proc/meminfo
MemTotal: 512000 kB MemFree: 64728 kB Buffers: 0 kB Cached: 0 kB SwapCached: 0 kB Active: 0 kB Inactive: 0 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 512000 kB LowFree: 64728 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 2080 kB Writeback: 0 kB AnonPages: 0 kB Mapped: 0 kB Slab: 0 kB PageTables: 0 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 0 kB Committed_AS: 0 kB VmallocTotal: 0 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB
Команда free
Команда free отображает общее количество свободной и занятой физической и своп памяти в системе, а также буферы, используемые ядром:
total used free shared buffers cached Mem: 500 436 63 0 0 0 -/+ buffers/cache: 436 63 Swap: 0 0 0
Опции
The -b switch displays the amount of memory in bytes; the -k switch (set by default) displays it in kilobytes; the -m switch displays it in megabytes. The -t switch displays a line containing the totals. The -o switch disables the display of a "buffer adjusted" line. If the -o option is not specified, free subtracts buffer memory from the used memory and adds it to the free memory reported. The -s switch activates continuous polling delay seconds apart. You may actually specify any floating point number for delay, usleep(3) is used for microsecond resolution delay times.
Команда vmstat
Комманда vmstat показывает статистику памяти включая дополнительную информацию о процессах
512000 K total memory 448132 K used memory 0 K active memory 0 K inactive memory 63868 K free memory 0 K buffer memory 0 K swap cache 0 K total swap 0 K used swap 0 K free swap 16956820 non-nice user cpu ticks 3531 nice user cpu ticks 3533257 system cpu ticks 459840831 idle cpu ticks 141559 IO-wait cpu ticks 0 IRQ cpu ticks 0 softirq cpu ticks 0 stolen cpu ticks 1424740 pages paged in 37143676 pages paged out 0 pages swapped in 0 pages swapped out 0 interrupts 1889466486 CPU context switches 1373407048 boot time 490111497 forks
Команда top
Эту команду я люблю больше всего, за ее реалтаймовость. Показывает в настоящем времени общую информацию о памяти, загруженности процессора и процессах которые выполняются
03:22:24 up 56 days, 2:24, 1 user, load average: 1.49, 1.29, 1.28 Mem: 512000k total, 448372k used, 63628k free, 0k buffers Swap: 0k total, 0k used, 0k free, 0k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1628 mysql 15 0 265m 56m 7824 S 14.3 11.3 789:48.32 mysqld 26074 usamotor 15 0 193m 49m 7488 S 11.3 9.9 12:15.55 php 13721 usamotor 15 0 191m 45m 7472 R 7.3 9.1 2:18.71 php 1 root 15 0 8364 848 724 S 0.0 0.2 1:04.34 init 1397 root 15 0 63312 1996 1284 S 0.0 0.4 0:12.50 nmbd 1401 root 15 0 93348 3488 2516 S 0.0 0.7 0:05.01 smbd 1420 root 18 0 93480 1684 608 S 0.0 0.3 0:00.00 smbd 1421 root 23 0 54572 992 500 S 0.0 0.2 0:00.00 saslauthd 1422 root 23 0 54572 648 156 S 0.0 0.1 0:00.00 saslauthd 1429 root 15 0 5988 732 572 S 0.0 0.1 0:37.04 syslogd 1436 daemon 18 0 18720 440 284 S 0.0 0.1 0:00.00 atd 1444 bind 25 0 121m 11m 2388 S 0.0 2.3 0:00.55 named 1458 root 15 0 220m 13m 7616 S 0.0 2.7 2:14.62 apache2 1519 root 25 0 9144 1396 1136 S 0.0 0.3 0:00.00 mysqld_safe 1629 root 25 0 3860 664 568 S 0.0 0.1 0:00.00 logger 1680 root 18 0 21244 924 656 S 0.0 0.2 0:01.17 dovecot 1681 dovecot 15 0 12908 1148 876 S 0.0 0.2 0:00.52 anvil 1682 root 15 0 12908 1196 904 S 0.0 0.2 0:00.41 log 1766 root 15 0 72972 3156 1464 S 0.0 0.6 1:38.07 sendmail-mta 1783 root 15 0 49184 1168 620 S 0.0 0.2 0:27.42 sshd 1791 root 18 0 19340 984 780 S 0.0 0.2 0:00.00 xinetd 1806 root 16 0 33288 2036 1044 S 0.0 0.4 0:00.01 nginx 3209 root 19 0 20916 1016 772 S 0.0 0.2 0:16.68 cron 7983 proftpd 15 0 190m 2000 672 S 0.0 0.4 0:02.39 proftpd 8183 root 15 0 78980 3468 2748 S 0.0 0.7 0:00.01 sshd 9221 usamotor 15 0 78980 1728 988 R 0.0 0.3 0:00.22 sshd 9222 usamotor 15 0 121m 2164 1640 S 0.0 0.4 0:00.02 bash 11507 root 15 0 178m 13m 7812 S 0.0 2.6 0:50.33 ispmgr 13717 root 18 0 36740 3352 2816 S 0.0 0.7 0:00.00 cronrun 13719 usamotor 18 0 46056 1500 1196 S 0.0 0.3 0:00.00 su 13720 usamotor 20 0 9084 1240 1044 S 0.0 0.2 0:00.00 sh 15366 root 15 0 41956 1256 932 S 0.0 0.2 0:00.00 cron 15367 root 15 0 9068 1220 1036 S 0.0 0.2 0:00.00 sh 15368 root 20 0 9068 640 452 S 0.0 0.1 0:00.00 sh 15369 root 16 0 3860 596 496 S 0.0 0.1 0:00.00 run-parts 15381 root 18 0 9072 1256 1072 S 0.0 0.2 0:00.00 logrotate 15382 root 18 0 3876 508 432 S 0.0 0.1 0:00.00 sleep 16095 root 15 0 41956 1256 932 S 0.0 0.2 0:00.00 cron 16096 root 15 0 9068 1236 1056 S 0.0 0.2 0:00.00 sh 16097 root 15 0 3860 592 492 S 0.0 0.1 0:00.00 run-parts
UPD от 19.11.2015
Для того чтоб посмотреть сколько используется памяти сейчас использую htop. Который нужно предаврительно установить командой
How to check RAM size?
-m , —mebi Display the amount of memory in mebibytes.
—mega Display the amount of memory in megabytes. Implies —si .
free -h will output it in human-readable output (usually GiB: Gibibytes—base 1024). But, since RAM is usually sold in GB (Gigabytes—base 1000), NOT GiB (Gibibytes), free -h —si is usually better, as @Jollywatt says, to output it in Gigabytes instead.
Open a terminal ( CTRL + ALT + T ).
Run following command to see RAM information in KB (1 KB is equal to 1024 bytes).
Run following command to see RAM information in MB (1 MB is equal to 1024 KB).
Run following command to see RAM information in GB (1 GB is equal to 1024 MB).
Or you can run following command to see more information about the same:
free -h seems most helpful to me. «all output fields automatically scaled to shortest three digit unit»
Click on the power/gear icon (System Menu) in the top right corner of the screen and choose About This Computer. You will see the total available memory in GiB. Multiply the value by 1024 to get the size in MiB.
This value (and the value shown as Total in output of free -m on the console), is total physical RAM size, minus the amount assigned to the internal GPU, if your computer has one.
To see the total amount of physical RAM installed, you can run sudo lshw -c memory which will show you each individual bank of RAM you have installed, as well as the total size for the System Memory. This will likely presented as GiB value, which you can again multiply by 1024 to get the MiB value.