Легко понять использование оперативной памяти Linux с помощью Smem

Экран ноутбука с логотипом оболочки Bash на красном фонеФатмавати Ачмад Заэнури/Shutterstock

Использование памяти в Linux может быть трудно интерпретировать и трудно понять. С помощью smem легко узнать, какую память использует процесс и какие процессы используют больше всего.

Использование памяти

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

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

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

Пытаясь расшифровать все это и найти простой ответ на вопрос «Сколько оперативной памяти использует эта программа или процесс?» может оказаться неожиданной проблемой. Детализация великолепна и имеет свое место, но в равной степени избыток информации может быть препятствием.

Например, использование cat для просмотра псевдофайловой системы /proc/meminfo вернуло 50 строк вывода на машине, используемой для исследования этой статьи. С чего начать?

кот /proc/meminfo

И некоторые утилиты Linux дают разные ответы. На нашей тестовой машине у нас был запущен экземпляр less с идентификатором процесса 2183.

Мы можем использовать утилиту pmap с опцией -x (extended), чтобы получить полную картину использования памяти процессом. Мы будем использовать его с идентификатором процесса нашего экземпляра less:

pmap -x 2183

Запрос карты памяти одного процесса

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

Вывод pmap для одного экземпляра less

Затем мы использовали утилиту ps с параметром -o (выход), выбрали столбец RSS и передали ему идентификатор процесса того же экземпляра less:

пс-о рсс 2183

Использование ps для просмотра RSS того же экземпляра less

Получаем другой результат. Это дизайнерское решение со стороны авторов ps. Это со страницы руководства ps:

Поля SIZE и RSS не учитывают некоторые части процесса, включая таблицы страниц, стек ядра, структуру thread_info и структуру task_struct. Обычно это не менее 20 КБ памяти, которая всегда является резидентной. SIZE — виртуальный размер процесса (код+данные+стек).

У авторов других утилит есть свои взгляды на то, как измерять использование оперативной памяти.

RSS, USS и PSS

Размер резидентного набора (RSS) — это объем оперативной памяти, выделенной процессу, за исключением пространства подкачки, но включая любую оперативную память, необходимую для разделяемых библиотек, которые использует процесс.

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

Пропорциональный размер набора пытается решить эту проблему, разделяя объем общей памяти между процессами, которые ее совместно используют. Если есть четыре процесса, совместно использующих некоторую память, PSS сообщает, что 25% общей оперативной памяти используется каждым из этих процессов. Это приблизительно, но оно больше похоже на то, что происходит, чем на картину, которую рисует RSS.

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

USS и PSS — термины и понятия, предложенные Мэттом Макколлом, автором smem.

Утилита smem

Утилита smem сообщает об использовании памяти процессами, пользователями, отображением или всей системой. Во всех протестированных нами дистрибутивах он требовал установки. Чтобы установить его в Ubuntu, используйте эту команду:

sudo apt установить smem

Установка смема в Ubuntu

Чтобы установить smem в Fedora, вам нужно ввести:

sudo dnf установить smem

Установка смема в Fedora

Чтобы установить smem на Manjaro, используйте:

sudo pacman -Sy smem

Установка smem на Manjaro

Использование smem без параметров дает вам список процессов, использующих оперативную память.

Я могу

Вызов smem без параметров командной строки

В окне терминала отображается таблица информации.

Вывод smem по умолчанию

Столбцы:

  • PID: идентификатор процесса, использующего память.
  • Пользователь: имя пользователя, которому принадлежит процесс.
  • Команда: Командная строка, которая запустила процесс.
  • Swap: сколько места подкачки использует процесс.
  • USS: уникальный размер набора.
  • PSS: Пропорциональный размер набора.
  • RSS: размер резидентного набора.

Чтобы увидеть размеры, выраженные в процентах, используйте параметр -p (в процентах).

smem -p

Использование параметра smem -p для запроса процентов

Размеры в байтах заменены процентами.

вывод smem, показывающий проценты

Чтобы увидеть цифры, представленные в более удобной для человека форме, используйте параметр -k (сокращение). Это уменьшает цифры и добавляет индикаторы единиц измерения.

смем -к

Использование параметра smem -k для отображения размеров с индикаторами единиц измерения

Вместо необработанных байтов размеры отображаются в мегабайтах, гигабайтах и ​​т. д.

вывод smem с использованием индикаторов единиц измерения, таких как K, M и G

Чтобы добавить строку итогов, используйте параметр -t (итоги).

смем -к -т

Использование опции smem -t для добавления итоговой строки в вывод

В последней строке вывода показаны итоги по каждому столбцу.

Итоговая строка в нижней части вывода smem

Уточнение отчета

Вы можете попросить smem сообщить об использовании памяти пользователями, сопоставлением (библиотеками) или всей системой. Чтобы отфильтровать вывод по пользователю, используйте параметр -u (пользователь). Обратите внимание: если вы хотите увидеть больше, чем просто собственное использование, вам нужно будет запустить smem с помощью sudo .

смем -у судо смем -у

Использование параметра smem -u с sudo и без него

Как видите, выходные данные искажаются для имен пользователей длиннее восьми символов.

Чтобы увидеть использование, сопоставленное с используемыми библиотеками, независимо от того, какие процессы используют библиотеки и какие пользователи владеют этими процессами, используйте параметр -m (сопоставление).

смэм -м -к -т

Использование опции smem -m для получения отчета картографа

Мы также запросили удобочитаемые значения и итог.

Отображенный отчет smem, показывающий использование памяти библиотеками

Чтобы увидеть использование общесистемной памяти, используйте параметр -w (общесистемный).

смем -ш -к -т

Общесистемный отчет smem

Отчетность по отдельной программе

Применив немного магии командной строки, мы можем составить отчет об одной программе и обо всех ее подпроцессах. Мы направим вывод smem в tail и попросим tail показать только последнюю строку. Мы скажем smem использовать удобочитаемые значения и предоставить итог. Сумма будет последней строкой, и хвост строки будет отображаться для нас.

Мы воспользуемся опцией -c (столбцы) с smem и укажем, какие столбцы мы хотим включить в наш вывод. Мы ограничим это столбцом Proportional Set Size. Параметр -P (фильтр процесса) позволяет нам указать строку поиска для smem. Будут включены только совпадающие строки вывода.

smem -c pss -P firefox -k -t | хвост -n 1

Использование smem для отображения использования памяти процессом и его потомками

Это быстрый и удобный способ узнать потребление оперативной памяти программой и ее дочерними процессами.

Создание графиков

Вы можете передать параметры —pie или —bar, чтобы smem генерировал графики. Надо сказать, что при слишком большом количестве категорий графики быстро становятся непонятными, но они могут быть полезны для быстрого визуального обзора.

Формат команды:

smem —имя пирога -s uss

Попросите smem построить круговую диаграмму

Круговая диаграмма появится в отдельном окне просмотра.

Круговая диаграмма smem в отдельном окне просмотра

Чтобы увидеть другие графики, используйте pss или rss вместо uss. Чтобы увидеть гистограмму, используйте —bar вместо —pie.

Чтобы это работало, вам необходимо установить Python вместе с библиотекой matplotlib. Они уже были установлены в протестированных нами дистрибутивах Ubuntu, Fedora и Manjaro.

Хорошего по немногу

У утилиты smem есть еще несколько хитростей в рукаве, и вам рекомендуется ознакомиться с ее справочной страницей. Его основной репертуар — это то, что мы описали здесь, и это отличный небольшой инструмент, который должен быть в вашем наборе инструментов CLI.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.