- Smem – Отчеты о распределении памяти между процессами и пользователями в Linux
- Как установить Smem – инструмент мониторинга памяти в Linux
- На системах RHEL, CentOS и Fedora
- На системах Debian и Ubuntu
- На Linux Mint
- На Arch Linux
- Как использовать Smem
- Как определить, сколько памяти занимает процесс?
- Команда ps
- Команда top
- Получение занятой памяти из /proc
- Мониторинг потребления системных ресурсов Linux
- Введение
- Мониторинг общего потребления памяти
- Потребление памяти отдельными процессами
Smem – Отчеты о распределении памяти между процессами и пользователями в Linux
И снова здравствуйте. Друзья, хотим поделиться с вами переводом полезного материала о мониторинге использования памяти в Linux. Данный материал подготовлен специально для студентов курса «Администратор Linux».
Управление памятью в вопросах мониторинга ее использования – одна из самых важных областей в вашей Linux системе. В различных дистрибутивах Linux существует великое множество инструментов для мониторинга использования памяти. Работают они тоже по разному, но в этой статье мы рассмотрим установку и использования такого инструмента как smem.
Smem – это инструмент предоставления отчетов в командной строке, который выдает пользователю различные сводки по использованию памяти в системе Linux. В smem есть одна уникальная вещь, которая отличает его от традиционных инструментов мониторинга памяти. Дело в том, что smem сообщает вам PSS (Proportional Set Size), то есть он дает более полноценное представление о распределении памяти между приложениями и библиотеками в настройках виртуальной памяти.
Существующие традиционные инструменты сосредоточена главным образом на считывании RSS (Resident Set Size), т.е. на стандартной мере мониторинга использования памяти в физической схеме памяти, которая тем не менее имеет тенденцию переоценивать использование памяти приложениями.
С другой стороны PSS рационально оценивает использование памяти, определяя справедливое ее распределение между приложениями и библиотеками в схеме виртуальной памяти.
Вы можете обратиться к этому руководству (о PSS и RSS памяти), чтобы понять механизм потребления памяти в системе Linux. А теперь давайте перейдем к рассмотрению некоторых особенностей smem.
Особенности Smem:
- Листинг обзора системы;
- Листинг и фильтрация по процессам, маппингам и пользователям;
- Использование данных из файловой системы /proc;
- Настраиваемые столбцы листинга для нескольких источников данных;
- Конфигурируемые блоки вывода и процентные показатели;
- Простота настройки заголовков и итогов в списках;
- Использование моментальных снимков из зеркал каталогов или сжатых tar файлов;
- Встроенный механизм генерации диаграмм;
- Облегчённый инструмент захвата, используемый во встроенных системах.
Как установить Smem – инструмент мониторинга памяти в Linux
Перед тем, как приступить к установке smem, необходимо убедиться, что ваша система удовлетворяет следующим параметрам:
- Современное ядро (версия от 2.6.27);
- Актуальная версия Python (поддерживается от 2.4);
- Опционально библиотека matplotlib для генерации диаграмм.
Большинство дистрибутивов Linux на сегодняшний день поставляются с последней версией ядра с поддержкой Python 2 или 3, поэтому единственным требованием по сути может быть только установка matplotlib для отрисовки красивых графиков.
На системах RHEL, CentOS и Fedora
Для начала включите репозиторий EPEL (Extra Packages for Enterprise Linux), затем установите следующее:
На системах Debian и Ubuntu
На Linux Mint
На Arch Linux
Как использовать Smem
Чтобы увидеть отчет по использованию памяти системой, всеми пользователями системы, введите следующую команду:
Когда стандартный пользователь запускает smem, то отображается использование памяти процессом, который инициировал этот пользователь. Процессы организованы по возрастанию PSS.
Взгляните на пример вывода для моей системы. Здесь показано использование памяти для процессов, инициированных пользователем aaronkilik:
Есть множество опций, которые вы можете вызвать во время использования smem, например, чтобы просмотреть потребление памяти в масштабах системы, выполните следующую команду:
Также вы можете просмотреть использование памяти маппингами:
У smem есть параметры фильтрации выходных данных. Сейчас мы взглянем на два примера.
Фильтрация вывода по имени пользователя (username) осуществляется вызовом опций -u или —userfilter=»regex» , как в примере ниже:
Чтобы отфильтровать выходные данные по имени процесса, включите опцию -P или —processfilter=»regex» :
Форматирование вывода может быть крайне полезным, поэтому smem предоставляет параметры, которые помогут вам форматировать отчеты об использовании памяти. Далее мы рассмотрим пару примеров.
Чтобы отображать в отчете только необходимые столбцы, используйте -c или –columns , как показано ниже:
Вы можете использовать параметр -p , чтобы выводить отчет об использовании памяти в процентном соотношении:
Следующая команда будет выводить итоговые показатели в конце каждого столбца выходных данных:
Кроме того, есть специальные опции для графических сводок, которые вы также можете использовать. В этой секции мы их и рассмотрим.
Вы можете создать гистограмму процессов и их PSS и RSS значений. В приведенном ниже примере мы создаем гистограмму процессов, принадлежащих пользователю root.
Вы имеете возможность создать круговую диаграмму, отражающую процессы и потребление памяти ими на основе PSS или RSS значений. Команда ниже выводит круговую диаграмму для процессов, принадлежащих пользователю root, отражающую ключевые значения.
— — pie означает метку по имени, а опция -s помогает сортировать по значению PSS.
Существует множество других полей помимо PSS и RSS, используемых для маркировки диаграмм.
Чтобы увидеть справку, просто введите smem -h или обратитесь к документации.
Сейчас мы остановимся в smem на этом этапе. Если вы хотите получше разобраться с этим инструментом, посетите страницу руководства.
Источник
Как определить, сколько памяти занимает процесс?
Linux – довольно гибкая система, выполнить задачи в которой можно разными способами. Сегодня мы рассмотрим, как узнать, сколько оперативной памяти (ОЗУ — оперативное запоминающее устройство или RAM — Random Access Memory) используется определенным процессом. Сама оперативная память представляет собой специальное устройство, которое используется для временного хранения данных и обеспечивает функционирование ПО.
ОЗУ не стоит путать с ПЗУ (постоянным запоминающим устройством): их отличие заключается в том, что оперативная память является энергозависимой (при выключении компьютера все данные исчезнут), в то время как память жесткого диска сохранит все данные даже после выключения машины. Поэтому и функции, которые они выполняют, также разнятся. Процессор использует оперативную память для быстрого доступа к данным — жесткий диск такую скорость обеспечить не может, поэтому при запуске программа загружается в оперативную память.
Мы отследим занимаемую память на примере процесса веб-сервера Apache.
Команда ps
Первым вариантом будет команда ps, с помощью которой можно получить список процессов, запущенных на сервере.
— идентификатор процесса, в нашем случае это число 897110.
Получим следующий вывод:
ОЗУ будет представлено в процентном соотношении к общему количеству доступной памяти. К сожалению, в данном примере этот процент крайне мал, и столбец %MEM показывает 0,0.
Команда ps имеет свои ключи, которые вы также можете использовать для удобства:
- -A : все процессы;
- -a : процессы, связанные с конкретным терминалом, кроме главных системных процессов сеанса;
- -d : все процессы, кроме главных системных процессов сеанса;
- T : все процессы на конкретном терминале;
- a : процессы, связанные с текущим терминалом, а также процессы других пользователей;
- r : информация только о работающих процессах;
- x : процессы, отсоединённые от терминала.
Команда top
Второй вариант – использование команды top. Более продвинутые пользователи должны знать эту команду, так как она выводит информацию о нагрузке системы и обновляет ее в реальном времени.
Обратите внимание на столбцы VIRT и %MEM. Последний столбец показывает информацию, которая очень похожа на ту, что получили предыдущей командой. А вот столбец VIRT отображает занятую виртуальную память.
Одним словом, виртуальная память – это некая комбинация ОЗУ и swap, которую использует запущенный процесс.
Обратите внимание, что команда top ограничена размерами окна, из-за чего игнорируется вся информация, которая не помещается на экран.
Получение занятой памяти из /proc
Последней командой для получения занятой процессором памяти будет обращение к псевдофайловой системе /proc.
Снова будет выведен результат, который схож с уже полученным ранее – виртуальная память, используемая процессом веб-сервера Apache.
Вот мы и разобрали на примере процесса Apache способы, которыми можно посмотреть занимаемую память.
Источник
Мониторинг потребления системных ресурсов Linux
Введение
Данные о системных ресурсах можно получить из виртуальных файлов в директории
1 18 21 31279 43 629 acpi kallsyms self 10 18349 22 32 44 659 asound kcore slabinfo 1051 18421 23 327 45 660 buddyinfo keys softirqs 1055 19 2375 33 46 662 bus key-users stat 11 19194 24 368 482 675 cgroups kmsg swaps 11527 19359 2400 369 4925 676 cmdline kpagecount sys 11529 19402 2402 379 499 680 consoles kpageflags sysrq-trigger 11532 19570 279 380 517 684 cpuinfo loadavg sysvipc 11762 19711 282 393 5677 686 crypto locks timer_list 11764 2 283 394 571 7 devices mdstat timer_stats 11765 20 284 395 575 8 diskstats meminfo tty 11818 20027 285 396 577 8413 dma misc uptime 11819 20182 2858 397 579 8419 driver modules version 13 20311 287 398 581 8790 execdomains mounts vmallocinfo 14 20374 289 399 583 8815 fb mtrr vmstat 14600 20415 291 4 5834 8817 filesystems net zoneinfo 15 20475 292 400 5836 9 fs pagetypeinfo 16 20518 29343 401 585 9214 interrupts partitions 1672 20712 2996 402 588 9250 iomem sched_debug 1694 20839 30 403 6 9251 ioports schedstat 17 20840 31 41 60 97 irq scsi
meminfo содержит информацию о памяти
MemTotal: 8009160 kB MemFree: 5474752 kB MemAvailable: 7043488 kB Buffers: 2108 kB Cached: 1830824 kB SwapCached: 0 kB Active: 1191552 kB Inactive: 907404 kB Active(anon): 310848 kB Inactive(anon): 45940 kB Active(file): 880704 kB Inactive(file): 861464 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2097148 kB SwapFree: 2097148 kB …
cpu содержит информацию о процессоре
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 142 model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz stepping : 12 cpu MHz : 2304.012 cache size : 8192 KB …
В Linux есть удобная программа top которая может в реальном времени показывать данные из этих виртуальных файлов, а также утилита free которая показывает свободные системные ресурсы.
В этом руководстве используются знания из следующих статей:
Мониторинг общего потребления памяти
Мониторить общее потребление памяти и процессора с помощью top
#!/bin/bash top -b | grep ‘%Cpu(s)\|KiB Mem’
Обратите внимание, на выдачу вашего top. В CentOS у вас может стоять по умолчанию KiB а в Ubuntu MiB
Если предполагается делать какие-то вычисления — нужно разобраться с тем, что же выдаёт top
top — 14:41:49 up 20:18, 2 users, load average: 0.51, 0.32, 0.22 Tasks: 386 total, 1 running, 385 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.8 us, 1.0 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 8008504 total, 4713352 free, 1021040 used, 2274112 buff/cache KiB Swap: 8257532 total, 8257532 free, 0 used. 6646096 avail Mem
Из руководства по top можно сделать следующие выводы:
- Использованная CPU это 100 минус значение id (idle)
- Использованная память это значение used в строке, которая начинается с KiB Mem
us, user | time running un-niced user processes |
sy, system | time running kernel processes |
ni, nice | time running niced user processes |
id, idle | time spent in the kernel idle handler |
wa, IO-wait | time waiting for I/O completion |
hi | time spent servicing hardware interrupts |
si | time spent servicing software interrupts |
st | time stolen from this vm by the hypervisor |
Исходя из этих соображений, можно воспользоваться sed , awk и bc чтобы вытащить из выдачи top нужные величины и вычислить расход ресурсов.
#!/bin/bash IDLE=$(top -b -n 1 | grep ‘%Cpu(s)’ | sed ‘s/id.*//;s/^.*\,//’) MEM=$(top -b -n 1 | grep ‘KiB Mem’ | awk ‘
Комментарии к скрипту
- Строка 1: объявление bash скрипта
- Строка 2:
- Значение перед id нужно присвоить переменной IDLE
- top запускается в batch режиме (-b) один раз (-n 1)
- grep выделяет из выдачи top строку с %Cpu(s)
- Первое условие sed отбрасывается всё, что правее id, включая сам id
- Второе условие sed отбрасывает всё, что слева от последней запятой
- Строка 3:
- top запускается в batch режиме (-b) один раз (-n 1)
- awk находит нужный столбец
- Строка 4:
- bc помогает вычислить разность чисел
- Строка 5:
- Дата, расход ЦПУ и расход памяти записываются в log.txt
Потребление памяти отдельными процессами
Пример, скрипта, который в течении определённого количества секунд будет из показаний top выделять данные об использовании памяти и процессора несколькими определёнными процессами.
#!/bin/bash START=$(date +%s) DURATION=2 let COUNTER=$(date +%s)-$START while [ $COUNTER -lt $DURATION ]; do echo $(date ‘+Y-%m-%d %H:%M:%S,%3N’) >> log3.txt top -b -n 1 | grep ‘node\|postgres\|nginx’ | awk ‘
По умолчанию top выводит столбцы в следующем порядке
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
Узнать количество свободной памяти можно с помощью команды free
total used free shared buff/cache available Mem: 32538152 7937972 19124512 423056 5475668 23841896 Swap: 2097148 0 2097148
Если совместить free с watch получится настоящий мониторинг
Every 2.0s: free -m Sun Jan 17 16:20:10 2021 total used free shared buff/cache available Mem: 7820 1121 4339 56 2359 6361 Swap: 8063 0 8063
Каждые две секунды значение будет обновляться
-h human readable format
Filesystem Size Used Avail Use% Mounted on devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 89M 3.8G 3% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 9.1G 8.0G 54% / /dev/sda1 1014M 238M 777M 24% /boot tmpfs 783M 0 783M 0% /run/user/1000
Источник