Легко понять использование оперативной памяти Linux с помощью Smem
Опубликовано: 2022-01-29 Использование памяти в Linux может быть трудно интерпретировать и трудно понять. С помощью smem
легко узнать, какую память использует процесс и какие процессы используют больше всего.
Использование памяти
Linux предоставляет вам множество способов проверить, что происходит с оперативной памятью вашего компьютера. Проблема в том, что управление памятью — сложная задача для вашей операционной системы. Он должен совмещать физическую оперативную память, виртуальную оперативную память в виде пространства подкачки и требования различных типов процессов, которые выполняются в любой момент времени.
Процессы потребляют оперативную память, когда загружаются в память. Затем они запрашивают больше оперативной памяти, чтобы у них было место для выполнения любых задач, для которых они предназначены. Некоторые процессы почти не влияют на оперативную память, другие очень требовательны к памяти.
Ядро и остальная часть операционной системы, среда вашего рабочего стола и каждое приложение или сеанс командной строки, которые вы запускаете, требуют части конечного объема оперативной памяти, установленной на вашем компьютере. Одни процессы порождают другие процессы. Некоторые процессы делят оперативную память с другими процессами.
Пытаясь расшифровать все это и найти простой ответ на вопрос «Сколько оперативной памяти использует эта программа или процесс?» может оказаться неожиданной проблемой. Детализация великолепна и имеет свое место, но в равной степени избыток информации может быть препятствием.
Например, использование cat
для просмотра псевдофайловой системы /proc/meminfo вернуло 50 строк вывода на машине, используемой для исследования этой статьи. С чего начать?
кот /proc/meminfo
И некоторые утилиты Linux дают разные ответы. На нашей тестовой машине у нас был запущен экземпляр less
с идентификатором процесса 2183.
Мы можем использовать утилиту pmap
с параметром -x
(extended), чтобы получить полную картину использования памяти процессом. Мы будем использовать его с идентификатором процесса нашего экземпляра less
:
pmap -x 2183
В нижней части вывода мы получаем общий размер резидентного набора, который представляет собой объем используемой основной оперативной памяти.
Затем мы использовали утилиту ps
с параметром -o
(выход), выбрали столбец RSS
и передали ему идентификатор процесса того же экземпляра less
:
пс-о рсс 2183
Получаем другой результат. Это дизайнерское решение со стороны авторов ps
. Это со man
руководства ps
:
У авторов других утилит есть свои взгляды на то, как измерять использование оперативной памяти.
RSS, USS и PSS
Размер резидентного набора (RSS) — это объем ОЗУ, выделенный процессу, за исключением пространства подкачки, но включая ОЗУ, необходимое для разделяемых библиотек, которые использует процесс.
RSS почти всегда завышает использование оперативной памяти. Если два или более процессов используют одну или несколько общих библиотек, RSS просто добавит использование ОЗУ каждой библиотекой к своему счетчику использования ОЗУ для каждого из этих процессов. Помимо неточности, в этом есть определенная ирония. Общие библиотеки означают, что каждому процессу не нужно загружать свой собственный частный экземпляр библиотеки. Если библиотека уже находится в памяти, она будет использовать ее совместно, что снизит нагрузку на оперативную память.
Пропорциональный размер набора пытается решить эту проблему, разделяя объем общей памяти между процессами, которые ее совместно используют. Если есть четыре процесса, совместно использующих некоторую память, PSS сообщает, что 25% общей оперативной памяти используется каждым из этих процессов. Это приблизительно, но оно больше похоже на то, что происходит, чем на картину, которую рисует RSS.
Размер уникального набора — это объем ОЗУ, который используется исключительно процессом, независимо от того, потребляется ли он непосредственно процессом или используется библиотеками, которые используются исключительно процессом. Опять же, он игнорирует пространство подкачки. Его интересует только настоящая физическая оперативная память.
USS и PSS — термины и понятия, предложенные Мэттом Макколлом, автором smem
.
Утилита smem
Утилита smem
сообщает об использовании памяти процессами, пользователями, отображением или всей системой. Во всех протестированных нами дистрибутивах он требовал установки. Чтобы установить его в Ubuntu, используйте эту команду:
sudo apt установить smem
Чтобы установить smem
в Fedora, вам нужно ввести:
sudo dnf установить smem
Чтобы установить smem
на Manjaro, используйте:
sudo pacman -Sy smem
Использование smem
без параметров дает вам список процессов, использующих оперативную память.
смем
В окне терминала отображается таблица информации.
Столбцы:
- PID : идентификатор процесса, использующего память.
- Пользователь : имя пользователя, которому принадлежит процесс.
- Command : Командная строка, которая запустила процесс.
- Swap : сколько места подкачки использует процесс.
- USS : Размер уникального набора.
- PSS : Пропорциональный размер набора.
- RSS : размер резидентного набора.
Чтобы увидеть размеры, выраженные в процентах, используйте параметр -p
(в процентах).
smem -p
Размеры в байтах заменены процентами.
Чтобы увидеть цифры, представленные в более удобной для человека форме, используйте параметр -k
(сокращение). Это уменьшает цифры и добавляет индикаторы единиц измерения.
смем -к
Вместо необработанных байтов размеры отображаются в мегабайтах, гигабайтах и т. д.
Чтобы добавить строку итогов, используйте параметр -t
(итоги).
смем -к -т
В последней строке вывода показаны итоги по каждому столбцу.
Уточнение отчета
Вы можете попросить smem
сообщить об использовании памяти пользователями, сопоставлением (библиотеками) или всей системой. Чтобы отфильтровать вывод по пользователю, используйте параметр -u
(пользователь). Обратите внимание: если вы хотите увидеть больше, чем просто собственное использование, вам нужно будет запустить smem
с помощью sudo
.
смем -у
судо смем -у
Как видите, выходные данные искажаются для имен пользователей длиннее восьми символов.
Чтобы увидеть использование, сопоставленное с используемыми библиотеками, независимо от того, какие процессы используют библиотеки и какие пользователи владеют этими процессами, используйте параметр -m
(сопоставление).
смэм -м -к -т
Мы также запросили удобочитаемые значения и итог.
Чтобы увидеть использование общесистемной памяти, используйте параметр -w
(общесистемный).
смем -ш -к -т
Отчетность по отдельной программе
Применив немного магии командной строки, мы можем составить отчет об одной программе и обо всех ее подпроцессах. Мы направим вывод smem
в tail
и попросим tail
показать только последнюю строку. Мы скажем smem
использовать удобочитаемые значения и предоставить итог. Сумма будет последней строкой, и tail
строки будет отображаться для нас.
Мы воспользуемся опцией -c
(столбцы) с smem
и укажем, какие столбцы мы хотим включить в наш вывод. Мы ограничим это столбцом Proportional Set Size. Параметр -P
(фильтр процесса) позволяет нам указать строку поиска для smem
. Будут включены только совпадающие строки вывода.
smem -c pss -P firefox -k -t | хвост -n 1
Это быстрый и удобный способ узнать потребление оперативной памяти программой и ее дочерними процессами.
Создание графиков
Вы можете передать параметры --pie
или --bar
, чтобы smem
генерировал графики. Надо сказать, что при слишком большом количестве категорий графики быстро становятся непонятными, но они могут быть полезны для быстрого визуального обзора.
Формат команды:
smem --имя пирога -s uss
Круговая диаграмма появится в отдельном окне просмотра.
Чтобы увидеть другие графики, используйте pss
или rss
вместо uss
. Чтобы увидеть гистограмму, используйте --bar
вместо --pie
.
Чтобы это работало, вам необходимо установить Python вместе с библиотекой matplotlib
. Они уже были установлены в протестированных нами дистрибутивах Ubuntu, Fedora и Manjaro.
Хорошего по немногу
У утилиты smem
есть еще несколько хитростей в рукаве, и вам рекомендуется ознакомиться с ее man
страницей. Его основной репертуар — это то, что мы описали здесь, и это отличный небольшой инструмент, который должен быть в вашем наборе инструментов CLI.
СВЯЗАННЫЕ: 37 важных команд Linux, которые вы должны знать