Гид по технологиям

Как смотреть использование оперативной памяти (RAM) в Linux

13 min read Linux Обновлено 24 Dec 2025
Как смотреть использование RAM в Linux
Как смотреть использование RAM в Linux

Планка оперативной памяти на столе

Быстрые ссылки

  • How Linux Uses RAM

  • The free Command

  • The vmstat Command

  • The top Command to Display Current RAM Use

  • Reading /proc/meminfo

Краткое резюме

  • В Linux есть несколько команд для просмотра состояния памяти; у каждой — свои сильные стороны.
  • free показывает текущие значения Total, Used, Free, Shared, Buff/Cache и Available для RAM и swap в удобной таблице.
  • top отображает информацию в реальном времени по CPU, памяти и процессам и удобен для поиска процессов, потребляющих память.

Как Linux использует RAM

Оперативная память (RAM) — ограниченный ресурс, за который конкурируют все процессы: приложения, системные службы и сам ядро. Ядро распределяет память и при необходимости отражает часть данных в swap, чтобы освободить физическую память. Важно помнить простую мысль: пустая память — расточительство. Потому Linux активно использует свободную память для буферов и кэша диска, чтобы ускорить работу системы.

Короткое определение: swappiness — параметр ядра, задающий склонность к использованию swap, он не является жестким порогом включения свапа.

Почему это важно:

  • Кэш и буферы видны как «занятая» память, но освобождаются немедленно при необходимости.
  • Высокая активность swap не всегда означает, что память закончилась — иногда это нормальная работа под нагрузкой или политика swappiness.
  • Для диагностики нужны разные инструменты: быстрый снимок, временные ряды и глубокий дамп состояния.

Важно: перед принятием мер (перезагрузка, добавление RAM, изменение swappiness) соберите метрики и проведите сравнительный анализ.

Команды и источники данных — обзор

Ниже — обзор основных инструментов, их сильные стороны и когда их использовать.

  • free — быстрый снимок используемой и доступной памяти.
  • top — интерактивный монитор процессов и потребления памяти в реальном времени.
  • vmstat — статистика виртуальной памяти, свопа и средние значения с момента загрузки.
  • /proc/meminfo — самый «сырый» и подробный источник полей памяти, которые читают утилиты.
  • ps, pmap — для подробного анализа использования памяти отдельным процессом.
  • sar, atop, glances, collectd, Prometheus exporters — для длительного мониторинга и хранения метрик.

Команда free

Команда free выводит таблицу с общим объёмом, используемой, свободной, общей, буферной/кэшированной и доступной памятью, а также по swap.

Пример используемого ключа: -m (мебибайты). Можно также использовать -b (байты), -k (кибибайты) или -g (гибибайты).

free -m

free -m в окне терминала

Пример вывода:

TotalUsedFreeSharedShared Buff/CacheAvailable
Mem19879278079980811
Swap1521651869

Поля Mem:

  • Total: общий объём физической RAM.
  • Used: фактическое используемое (подсчитано как Total − Free − Buffers − Cache в старых версиях, современные показывают полезную оценку).
  • Free: чисто неиспользуемая память.
  • Shared: память, используемая tmpfs и похожими FS.
  • Buff/cache: память под буферы и кэш, которую ядро может быстро освободить.
  • Available: оценка памяти, доступной для новых приложений без необходимости свопа.

Поля Swap:

  • Total: размер swap-раздела или файла.
  • Used: сколько swap занято.
  • Free: сколько swap свободно.

Полезная команда для расчёта процентного использования swap (в мебибайтах):

free -m | grep Swap | awk '{print ($3/$2)*100}'

Примечание: в большинстве случаев ориентируйтесь на поле Available (а не только Used/Free), чтобы понять, сколько памяти реально доступно для запуска новых процессов.

Команда vmstat

vmstat полезен для понимания состояния виртуальной памяти и свопа. Он показывает средние значения с момента последней загрузки или за заданный интервал.

Запуск по умолчанию:

vmstat

vmstat в окне терминала

Ключевые поля и их смысл:

  • Proc:
    • r — количество процессов, готовых к выполнению (runnable).
    • b — процессы в безусловно прерываемом сне (blocked), обычно ждущие завершения I/O.
  • Memory:
    • swpd — объём виртуальной памяти, используемый в swap (в кБ по умолчанию).
    • free — объём свободной памяти.
    • buff — используемая под буферы память.
    • cache — используемая под кэш.
  • Swap:
    • si — объём, подкачанный в память из swap (swap in).
    • so — объём, выгруженный в swap (swap out).
  • IO:
    • bi — блоки, прочитанные с устройства (blocks in).
    • bo — блоки, записанные на устройство (blocks out).
  • System:
    • in — прерывания в секунду.
    • cs — переключения контекста в секунду.
  • CPU (проценты):
    • us — пользовательское время (user).
    • sy — системное (kernel).
    • id — простой (idle).
    • wa — ожидание ввода/вывода (iowait).
    • st — steal time — время, «украденное» гипервизором от виртуальной машины.

Когда использовать vmstat:

  • Для оценки, активно ли система свопит (высокие si/so), что указывает на нехватку памяти или на политику свопинга.
  • Для изучения тенденций по CPU и I/O во времени, если запустить vmstat с интервалом: vmstat 5 12 — 12 срезов каждые 5 секунд.

Команда top — монитор процессов в реальном времени

top показывает обновляемую панель с информацией по CPU, памяти и списком процессов.

top

top в окне терминала

Нажатие клавиши e переключает отображение памяти в мегабайты для удобства чтения.

Верхняя часть экрана top содержит пять строк агрегированного состояния, нижняя — список процессов.

Строки сверху:

  • Строка 1: время, время работы (uptime), число пользователей и load average за 1/5/15 минут.
  • Строка 2: число задач и их состояния: running, sleeping, stopped, zombie.
  • Строка 3: сводка по CPU (us, sy, ni, id, wa, hi, si, st).
  • Строка 4: общая память и её распределение (total, free, used, buffers, cached).
  • Строка 5: swap — общая, свободная, используемая и доступная память с учётом кэша.

Колонки списка процессов:

  • PID — идентификатор процесса.
  • USER — владелец процесса.
  • PR — приоритет процесса.
  • NI — значение nice.
  • VIRT — виртуальная память процесса.
  • RES — резидентная (физическая) память.
  • SHR — разделяемая память.
  • S — статус процесса (D, R, S, T, Z).
  • %CPU — доля CPU, использованная с последнего обновления.
  • %MEM — доля физической памяти.
  • TIME+ — всё время CPU, затраченное процессом (в сотых секунды).
  • COMMAND — команда/аргументы.

Коды статусов в столбце S:

  • D — uninterruptible sleep (обычно ожидание I/O).
  • R — running.
  • S — sleeping.
  • T — stopped / traced.
  • Z — zombie.

Советы по top:

  • Нажмите M для сортировки по потреблению памяти.
  • Нажмите P для сортировки по потреблению CPU.
  • Используйте фильтры по пользователю (u) и по команде (o / O).
  • Нажмите Q для выхода.

Чтение /proc/meminfo

Большинство утилит берут данные из файловой системы /proc. /proc/meminfo — самый подробный источник данных о состоянии памяти.

less /proc/meminfo

less /proc/meminfo в окне терминала

Пример вывода (значения в кБ):

MemTotal: 2035260 kB  
MemFree: 919064 kB  
MemAvailable: 1300932 kB  
Buffers: 33528 kB  
Cached: 457604 kB  
SwapCached: 29732 kB  
Active: 313360 kB  
Inactive: 603276 kB  
Active(anon): 74648 kB  
Inactive(anon): 355004 kB  
Active(file): 238712 kB  
Inactive(file): 248272 kB  
Unevictable: 16 kB  
Mlocked: 16 kB  
SwapTotal: 1557568 kB  
SwapFree: 873024 kB  
Dirty: 80 kB  
Writeback: 0 kB  
AnonPages: 414100 kB  
Mapped: 97436 kB  
Shmem: 4148 kB  
KReclaimable: 52932 kB  
Slab: 94216 kB  
SReclaimable: 52932 kB  
SUnreclaim: 41284 kB  
KernelStack: 9280 kB  
PageTables: 45264 kB  
NFS_Unstable: 0 kB  
Bounce: 0 kB  
WritebackTmp: 0 kB  
CommitLimit: 2575196 kB  
Committed_AS: 5072192 kB  
VmallocTotal: 34359738367 kB  
VmallocUsed: 35712 kB  
VmallocChunk: 0 kB  
Percpu: 720 kB  
HardwareCorrupted: 0 kB  
AnonHugePages: 0 kB  
ShmemHugePages: 0 kB  
ShmemPmdMapped: 0 kB  
CmaTotal: 0 kB  
CmaFree: 0 kB  
HugePages_Total: 0  
HugePages_Free: 0  
HugePages_Rsvd: 0  
JugePages_Surp: 0  
Hugepagesize: 2048 kB  
Hugetlb: 0 kB  
DirectMap4k: 180160 kB  
DirectMap2M: 1916928 kB

Пояснения к основным полям (обобщённо):

  • MemTotal — общий доступный объём RAM за вычетом зарезервированных частей.
  • MemFree — текущее количество свободной памяти.
  • MemAvailable — оценка памяти, доступной без подкачки.
  • Buffers — буферы под блочные устройства.
  • Cached — файлы, закешированные из файловой системы.
  • SwapCached — объём, который был выгружен в swap и затем считан обратно, при этом копия осталась в swap.
  • Active / Inactive — страницы, недавно использованные и неиспользованные соответственно.
  • AnonPages — анонимные страницы, не связанные с файлами.
  • CommitLimit / Committed_AS — связанные с overcommit: лимит и сумма всех «обещанных» (committed) аллокаций.
  • HugePages_* — параметры для тех случаев, когда используются большие страницы (huge pages).
  • DirectMap* — сколько памяти сопоставлено в страницах определённого размера.

Замечание: названия полей и набор выводимых строчек могут слегка отличаться между версиями ядра и архитектурами CPU.

Интерпретация и типичные сценарии

Ниже — распространённые ситуации и как их интерпретировать:

  1. Похоже, что свободной памяти почти нет, но system работает нормально.

    • Скорее всего, большая часть используется как buff/cache. Это нормально — ядро использует свободную память для кэширования.
    • Проверьте free —m и поле Available. Если Available достаточно, проблем нет.
  2. Высокий swap activity (si/so) и заметное замедление.

    • Проверьте vmstat: высокие si/so указывают на активную подкачку.
    • Проверьте процессы через top, pmap — узнайте, какие процессы используют много анонимной памяти.
    • Оцените swappiness: cat /proc/sys/vm/swappiness. Типичные значения — 60 (по умолчанию), 10–30 для менее агрессивной подкачки.
  3. Непонятно растущая потребляемая память у процесса (утечка).

    • Используйте pmap -x PID, /proc/PID/status, top с сортировкой по RES и %MEM.
    • Запланируйте регулярные снимки ps aux –sort=-rss или pmap и сравните по времени.
  4. Падения OOM (Out Of Memory) и вмешательство OOM-killer.

    • Проверьте журнал dmesg и /var/log/kern.log на сообщения OOM.
    • Оцените committed memory (Committed_AS) и CommitLimit.

Методология диагностики — пошаговый SOP

Цель: быстро локализовать причину нехватки памяти и сократить время простоя.

  1. Быстрый снимок (1–2 минуты):

    • free -m
    • vmstat 1 5
    • top -b -n 1 | head -n 20 Соберите данные и сохраните в файл для последующего анализа.
  2. Детальный анализ процессов (5–15 минут):

    • ps aux –sort=-rss | head -n 20
    • pmap -x PID для подозрительных процессов
    • /proc/PID/status и /proc/PID/smaps для подробной карты памяти
  3. Проверка свопа и I/O (если есть задержки):

    • vmstat 5 12
    • iostat -xm 5 3 (из пакета sysstat)
    • dmesg | grep -i swap
  4. Проверка системных лимитов и настроек:

    • cat /proc/sys/vm/swappiness
    • sysctl vm.overcommit_memory; sysctl vm.overcommit_ratio
    • ulimit -a для проверки ограничений пользователя
  5. Если выявлена утечка памяти:

    • при возможности перезапустите сервис и посмотрите поведение.
    • если перезапуск невозможен, перераспределите нагрузку (scale out), если доступно.
  6. Документирование и профилактика:

    • Добавьте alert в систему мониторинга (примерные пороги: Available < 15% физической RAM; swap used > 20%).
    • Настройте периодические снимки ps/pmap для ретроспективного анализа.

Критерии приёмки: проблема решена, если после вмешательства (перезапуск/увеличение RAM/настройка swappiness) мониторинг показываает стабильную Available > 20% и нет повышения swap activity.

Дерево принятия решений (Mermaid)

flowchart TD
  A[Наблюдается медленная работа или OOM?] -->|Да| B{Swap активно?}
  B -->|Да| C[Проверить vmstat и si/so]
  C --> D{Высокие si/so?}
  D -->|Да| E[Идентифицировать процессы через top/ps/pmap]
  D -->|Нет| F[Проблема может быть в I/O или CPU]
  B -->|Нет| G[Проверить buff/cache и Available]
  G -->|Available низкий| E
  G -->|Available достаточный| H[Система нормально использует кэш]
  E --> I{Утечка памяти у процесса?}
  I -->|Да| J[Перезапустить процесс, патчить приложение]
  I -->|Нет| K[Рассмотреть увеличение RAM или балансировку нагрузки]

Чек-листы по ролям

Sysadmin (операционный):

  • Быстрый снимок: free -m, vmstat, top.
  • Сохранить логи и метрики.
  • Перезапустить сервисы, если это безопасно.
  • Настроить алерты в мониторинге.

DevOps / SRE:

  • Проверить метрики за время инцидента (Prometheus/Grafana).
  • Проанализировать тренды по памяти и swap.
  • Настроить автоматическое автоскейлинг или эвакуацию нагрузки.

Разработчик:

  • Проверить утечки в приложении: профилирование памяти, инструменты leak detectors.
  • Использовать ограничения cgroups/limits, чтобы приложение не разрушало систему.
  • Написать тесты нагрузки и мониторинг в CI.

Шаблоны и сниппеты

Скрипт-снимок для cron (сохраняет снимки в /var/log/mem-snapshots):

#!/bin/bash
OUTDIR=/var/log/mem-snapshots
mkdir -p "$OUTDIR"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
free -m > "$OUTDIR/free_$TIMESTAMP.txt"
vmstat 1 5 > "$OUTDIR/vmstat_$TIMESTAMP.txt"
ps aux --sort=-rss | head -n 50 > "$OUTDIR/ps_$TIMESTAMP.txt"

Скрипт отправки алерта (пример, отправляет в syslog):

#!/bin/bash
THRESHOLD=15 # процент Available
AVAIL=$(free -m | awk 'NR==2{printf "%.0f", $7/$2*100}')
if [ "$AVAIL" -lt "$THRESHOLD" ]; then
  logger -p user.alert "Low memory: Available ${AVAIL}%"
fi

Команды для быстрого поиска «тяжёлых» задач:

# По физической памяти
ps aux --sort=-rss | head -n 20

# По виртуальной
ps aux --sort=-vsz | head -n 20

# pmap подробный вывод по PID
pmap -x 

Таблица сравнения инструментов

ИнструментЧто показываетЛучшее использованиеМинусы
freeМоментальный снимок RAM и swapБыстрая диагностикаНет временных рядов
topЖивой монитор процессовДиагностика процессов в реальном времениИнтерфейс требует внимания
vmstatСредние значения, своп, I/OАнализ своп-активности и трендовМенее удобен для поиска конкретного процесса
/proc/meminfoСамый подробный дампГлубокий анализ и отладкаТребует интерпретации
ps/pmapОтдельные процессыАнализ потребления одного процессаНе даёт общей картины

Тестовые случаи и критерии приёмки

  1. Тест: симулировать повышение потребления памяти до 80%.

    • Ожидаемое поведение: Available падает, но buff/cache увеличивается; swap не должен расти существенно при swappiness низком.
    • Критерий приёмки: Система остаётся отзывчивой, процесс с ростом памяти выявлен.
  2. Тест: запуск стресс-теста памяти, провоцирующий swap.

    • Ожидаемое поведение: vmstat показывает рост si/so; top показывает рост %MEM у процессов.
    • Критерий приёмки: Алерты срабатывают, данные логируются для анализа.
  3. Тест: утечка памяти в приложении.

    • Ожидаемое поведение: RES процесса растёт со временем; pmap показывает рост anon pages.
    • Критерий приёмки: найден виновный процесс, выполнен план действий (перезапуск или багфик).

Когда инструменты вводят в заблуждение — контрпримеры

  • Ситуация: Free показывает почти 0 Free, но система не тормозит.

    • Пояснение: Значительная часть памяти занята под кэш; посмотреть Available и buff/cache.
  • Ситуация: swapUsed растёт, но si/so в vmstat низкие.

    • Пояснение: Возможно, swap был использован ранее и не вернулся в память; swapCached покажет, есть ли копии в swap.
  • Ситуация: большой VIRT у процесса, но маленький RES.

    • Пояснение: VIRT включает зарезервированную, но не используемую память; смотреть RES и pmap.

Совместимость и заметки по версиям ядра

  • Поля и названия в /proc/meminfo могут меняться между версиями ядра; проверяйте документацию ядра для конкретной версии.
  • Параметры swappiness, overcommit и hugetlb присутствуют в большинстве современных ядер, но их поведение и дефолтные значения могут отличаться.
  • В виртуализированных средах учитывайте steal time (st) в top/vmstat — он показывает конкуренцию за физический CPU.

Безопасность и приватность

  • Собранные дампы /proc и выводы утилит могут содержать имена процессов и пути, которые в некоторых организациях считаются чувствительными. Храните такие логи согласно политике безопасности.
  • Не передавайте логи в открытые каналы без маскировки конфиденциальных данных.

1‑строчный глоссарий

  • RAM: оперативная память.
  • swap: пространство на диске для подкачки страниц, выгруженных из RAM.
  • buff/cache: память, используемая для буферов и кэша файловой системы.
  • si/so: swap in / swap out — подкачка в/из swap.
  • RES/VIRT: resident / virtual memory процесса.

Полезные команды — шпаргалка

  • free -m — быстрый снимок памяти в мебибайтах.
  • vmstat 5 12 — 12 срезов каждые 5 секунд.
  • top — живой монитор процессов.
  • ps aux –sort=-rss | head -n 20 — 20 самых «тяжёлых» по памяти процессов.
  • pmap -x PID — подробная карта памяти процесса.
  • less /proc/meminfo — полный список полей памяти.
  • cat /proc/sys/vm/swappiness — текущий swappiness.

Короткое объявление для команды (100–200 слов)

Если вы управляете Linux-серверами, быстрое понимание состояния памяти — ключ к стабильности. Используйте free для моментального снимка, top для поиска «тяжёлых» процессов и vmstat для подтверждения активности swap. При аномалиях собирайте /proc/meminfo и снимки ps/pmap для дальнейшего анализа. Настройте алерты по Available и swap-used, сохраняйте регулярные снимки, и добавьте тесты нагрузки в CI, чтобы обнаруживать регрессии памяти на ранних этапах.

Резюме

  • free, top и vmstat — базовый набор для оперативного мониторинга памяти.
  • /proc/meminfo — источник истины для глубокого анализа.
  • Всегда ориентируйтесь на Available и на поведение swap, а не только на Free.
  • Собирайте данные, автоматизируйте снимки и настраивайте оповещения, чтобы сокращать время диагностики.

| | Linux Commands | | Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr | | | Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | | | Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld | |

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Создать и использовать фон Zoom
Руководство

Создать и использовать фон Zoom

Удаление или деактивация аккаунта Facebook
Конфиденциальность

Удаление или деактивация аккаунта Facebook

Контейнеризация Django с Docker — руководство
DevOps

Контейнеризация Django с Docker — руководство

Закрепление экспозиции и автофокуса на iPhone
Фото

Закрепление экспозиции и автофокуса на iPhone

Microsoft Family Safety — настройка родительского контроля
Родительский контроль

Microsoft Family Safety — настройка родительского контроля

Add Yours в Reels: как добавить и запустить тренд
соцсети

Add Yours в Reels: как добавить и запустить тренд