Как смотреть использование оперативной памяти (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
Пример вывода:
| Total | Used | Free | Shared | Shared Buff/Cache | Available | |
| Mem | 1987 | 927 | 80 | 79 | 980 | 811 |
| Swap | 1521 | 651 | 869 |
Поля 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
Ключевые поля и их смысл:
- 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
Нажатие клавиши 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
Пример вывода (значения в кБ):
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.
Интерпретация и типичные сценарии
Ниже — распространённые ситуации и как их интерпретировать:
Похоже, что свободной памяти почти нет, но system работает нормально.
- Скорее всего, большая часть используется как buff/cache. Это нормально — ядро использует свободную память для кэширования.
- Проверьте free —m и поле Available. Если Available достаточно, проблем нет.
Высокий swap activity (si/so) и заметное замедление.
- Проверьте vmstat: высокие si/so указывают на активную подкачку.
- Проверьте процессы через top, pmap — узнайте, какие процессы используют много анонимной памяти.
- Оцените swappiness: cat /proc/sys/vm/swappiness. Типичные значения — 60 (по умолчанию), 10–30 для менее агрессивной подкачки.
Непонятно растущая потребляемая память у процесса (утечка).
- Используйте pmap -x PID, /proc/PID/status, top с сортировкой по RES и %MEM.
- Запланируйте регулярные снимки ps aux –sort=-rss или pmap и сравните по времени.
Падения OOM (Out Of Memory) и вмешательство OOM-killer.
- Проверьте журнал dmesg и /var/log/kern.log на сообщения OOM.
- Оцените committed memory (Committed_AS) и CommitLimit.
Методология диагностики — пошаговый SOP
Цель: быстро локализовать причину нехватки памяти и сократить время простоя.
Быстрый снимок (1–2 минуты):
- free -m
- vmstat 1 5
- top -b -n 1 | head -n 20 Соберите данные и сохраните в файл для последующего анализа.
Детальный анализ процессов (5–15 минут):
- ps aux –sort=-rss | head -n 20
- pmap -x PID для подозрительных процессов
- /proc/PID/status и /proc/PID/smaps для подробной карты памяти
Проверка свопа и I/O (если есть задержки):
- vmstat 5 12
- iostat -xm 5 3 (из пакета sysstat)
- dmesg | grep -i swap
Проверка системных лимитов и настроек:
- cat /proc/sys/vm/swappiness
- sysctl vm.overcommit_memory; sysctl vm.overcommit_ratio
- ulimit -a для проверки ограничений пользователя
Если выявлена утечка памяти:
- при возможности перезапустите сервис и посмотрите поведение.
- если перезапуск невозможен, перераспределите нагрузку (scale out), если доступно.
Документирование и профилактика:
- Добавьте 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 | Отдельные процессы | Анализ потребления одного процесса | Не даёт общей картины |
Тестовые случаи и критерии приёмки
Тест: симулировать повышение потребления памяти до 80%.
- Ожидаемое поведение: Available падает, но buff/cache увеличивается; swap не должен расти существенно при swappiness низком.
- Критерий приёмки: Система остаётся отзывчивой, процесс с ростом памяти выявлен.
Тест: запуск стресс-теста памяти, провоцирующий swap.
- Ожидаемое поведение: vmstat показывает рост si/so; top показывает рост %MEM у процессов.
- Критерий приёмки: Алерты срабатывают, данные логируются для анализа.
Тест: утечка памяти в приложении.
- Ожидаемое поведение: 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 | |
Похожие материалы
Создать и использовать фон Zoom
Удаление или деактивация аккаунта Facebook
Контейнеризация Django с Docker — руководство
Закрепление экспозиции и автофокуса на iPhone
Microsoft Family Safety — настройка родительского контроля