Спрашивают – отвечаем. Какой утилитой можно посмотреть какой процесс сколько занимает памяти.Вопрос не праздный, часто нужно понять кто занял всю память или весь swap, причем сделать это в удобной форме, без лишней консольной магии.
Для этих целей следует использовать утилиту
smem, которая доступна в стандартных репозиториях.
Утилита достаточно проста, прежде всего запустим ее с ключом
-h, чтобы посмотреть доступные ключи. Их немного.
Если запустить утилиту без параметров, то вы получите список процессов в указанием занимаемой ими памяти в килобайтах отсортированный по возрастанию значений колонки PSS.
Всего колонок четыре, коротко разберем что они обозначают:
🔸 RSS – реальный объем памяти, выделяемый процессу, но это число не является точным, так как включает в себя в том числе память, занимаемую разделяемыми библиотеками, которые загружаются в память один раз, но в тоже время дает понять общие аппетиты процесса.
🔸 PSS – пропорциональный объем памяти, наиболее интересное с практической точки зрения число, так как объем памяти разделяемых библиотек делится пропорционально между процессами, например, если у нас три процесса используют одну и ту же библиотеку, то занимаемый ею объем памяти поделится на троих.
🔸 USS – уникальный объем памяти, который принадлежит собственно процессу, без учета разделяемых библиотек. Показывает фактическую стоимость запуска процесса и именно этот объем памяти будет возвращен в систему если процесс завершить.
🔸 Swap – объем сброшенных в подкачку страниц памяти процесса.
Сразу запоминаем полезные ключи программы:
▫️ -t - выводит снизу результирующую строку по всем колонкам
▫️ -p – представляет значение в процентах от общего объема памяти, а не в килобайтах
▫️ -а – подстраивает ширину колонок под текущий размер окна терминала
Как мы уже говорили, сортировка ведется по возрастанию колонки PSS, т.е. самые «жирные» процессы будут внизу.
Это поведение можно изменить ключами
-s и
-r, после которых следует указать имя колонки для сортировки. Ключ
-r сортирует значения в обратном порядке – по убыванию значений.
Например, чтобы посмотреть кто использует Swap в процентах по убыванию значений, используйте:
smem -tap -r swap
У применения этой утилиты есть одна особенность, будучи запущена с правами пользователя она показывает только процессы текущего пользователя, чтобы получить полное представление на уровне системы ее следует запускать от root или через sudo.
Также мы можем делать отборы по имени процесса или его владельцу, например, посмотрим все процессы Postgres по убыванию в процентах:
smem -tpa -P postgres -r pss
Или все процессы пользователя 1С:Предприятия:
smem -tpa -U usr1cv8 -r pss
Что еще можно посмотреть с ее помощью? Использование памяти в разрезе пользователей с ключом
-u или по всей системе с ключом
-w.
Отдельного упоминания стоит ключ
-m, который показывает маппинги, это файлы отраженные в оперативную память, чаще всего это разделяемые библиотеки, с данным ключом вы можете подробно посмотреть что именно у вас загружено в память и сколько места оно там занимает.