Введение / Зачем это нужно
Постоянный мониторинг использования оперативной памяти (RAM) — критически важная задача для администраторов Linux и разработчиков, развертывающих приложения. Неконтролируемое потребление памяти может привести к замедлению системы, активному использованию swap-раздела и в худшем случае — к краху процессов (OOM Killer). Этот гайд поможет вам освоить набор встроенных и сторонних инструментов для быстрой оценки состояния памяти, выявления "прожорливых" процессов и принятия обоснованных решений по оптимизации.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к терминалу Linux (через SSH или локально).
- Вы обладаете правами для выполнения команд (обычно достаточно обычного пользователя, но для установки дополнительных пакетов потребуются права sudo).
- Большинство инструментов (
free,top,vmstat,/proc/meminfo) уже предустановлены в любом дистрибутиве Linux. - Для установки
htop,nmonилиglancesпотребуется менеджер пакетов (apt,yum,dnf).
Шаг 1: Использование команды free
Команда free — самый быстрый способ получить сводную картину по оперативной памяти и swap-разделу.
free -h
Ключ -h (human-readable) выводит значения в удобных единицах (МБ, ГБ). Пример вывода:
total used free shared buff/cache available
Mem: 7.7G 2.1G 3.2G 156M 2.4G 5.1G
Swap: 2.0G 0B 2.0G
Обратите внимание на столбцы:
- used: память, используемая процессами (без учета кэшей).
- free: полностью неиспользуемая память.
- buff/cache: память, занятая буферизацией и кэшированием (ядро может освободить её при необходимости).
- available: оценка памяти, доступной для запуска новых процессов без swap. Это самый важный показатель.
Шаг 2: Интерактивный мониторинг с top и htop
Для наблюдения за динамикой и выявления процессов, потребляющих много памяти, используйте top или более удобную альтернативу htop.
Использование top
Запустите:
top
По умолчанию top сортирует по загрузке CPU. Чтобы сортировать по памяти, нажмите F (или f), затем выберите столбец %MEM (или RES для физической памяти) и нажмите s для сохранения. Для выхода нажмите q.
Установка и использование htop
htop предоставляет цветное интерфейс с удобным управлением:
# Для Ubuntu/Debian:
sudo apt update && sudo apt install htop
# Для CentOS/RHEL/Fedora:
sudo yum install htop # или sudo dnf install htop
Запустите htop. Память отображается в виде цветных полос вверху (синий — used, зеленый — buff/cache). Для сортировки по памяти нажмите F6 и выберите PERCENT_CPU или RES, или просто кликните на заголовок столбца (если мышь поддерживается). Процессы, которые используют больше всего памяти, будут наверху.
Шаг 3: Статистика виртуальной памяти с vmstat
vmstat дает общую статистику по системе, включая память, swap и операции ввода-вывода.
vmstat -s
Вывод покажет детализированные цифры, например:
8192000 K total memory
2150400 K used memory
3901440 K active memory
1324544 K inactive memory
3176448 K free memory
123456 K buffer memory
2048000 K swap cache
2097152 K total swap
0 K used swap
2097152 K free swap
Для непрерывного мониторинга с интервалом в 2 секунды:
vmstat 2
Обращайте внимание на столбцы si (swap in) и so (swap out). Если они постоянно отличны от нуля, это признак нехватки оперативной памяти.
Шаг 4: Детальная информация из /proc/meminfo
Файл /proc/meminfo содержит наиболее подробные и низкоуровневые данные о памяти. Это текстовый файл, который можно читать напрямую:
cat /proc/meminfo
Пример вывода (сокращен):
MemTotal: 8192000 kB
MemFree: 3176448 kB
MemAvailable: 5100000 kB
Buffers: 123456 kB
Cached: 2048000 kB
SwapCached: 0 kB
Active: 3901440 kB
Inactive: 1324544 kB
SwapTotal: 2097152 kB
SwapFree: 2097152 kB
Здесь:
- MemAvailable — наиболее точная оценка доступной памяти (учитывает кэши и буферы, которые можно быстро освободить).
- Cached — память, используемая кэшем страниц (для ускорения чтения диска).
- Buffers — память для буферизации блочных устройств (например, дисков).
Для фильтрации конкретных полей можно использовать grep:
grep -E 'MemTotal|MemFree|MemAvailable|Buffers|Cached' /proc/meminfo
Шаг 5: Расширенные утилиты nmon и glances
Для комплексного мониторинга системы, включая память, CPU, диски и сеть, удобны утилиты nmon и glances.
Установка nmon
# Ubuntu/Debian:
sudo apt install nmon
# CentOS/RHEL:
sudo yum install nmon
Запустите nmon. Нажмите m для переключения на экран памяти. Там вы увидите подробную разбивку по типам памяти, а также графики в реальном времени. Для выхода нажмите q.
Установка glances
glances — кросс-платформенный мониторинг в текстовом режиме с возможностью веб-интерфейса.
# Установка через pip (рекомендуется):
pip3 install glances
# Или через менеджер пакетов (может быть устаревшая версия):
sudo apt install glances # Ubuntu/Debian
Запустите glances. По умолчанию отображаются все метрики, включая память (вверху слева). Нажмите h для справки по управлению.
Проверка результата
После выполнения шагов вы должны:
- Увидеть в выводе
free -hили/proc/meminfoактуальные значения памяти. Полеavailable(илиMemAvailable) должно быть разумным (не близким к нулю). - В
top/htopубедиться, что нет процессов, постоянно потребляющих больше памяти, чем ожидалось. - При использовании
vmstatпроверить, чтоsiиsoблизки к нулю (если swap активен постоянно — это тревожный знак). - В
nmon/glancesоценить общую картину и тенденции.
Если память заканчивается, вы увидите рост used и падение free/available, а также увеличение активности swap (si, so).
Возможные проблемы
1. Ошибка "command not found" для htop/nmon/glances
Решение: Установите недостающий пакет через менеджер пакетов вашего дистрибутива (см. шаги выше). Убедитесь, что вы используете sudo для установки.
2. Недостаточно прав для просмотра информации о процессах
Решение: Обычно команды free, vmstat, cat /proc/meminfo доступны всем. Но для просмотра всех процессов в top/htop (особенно чужих) может потребоваться запуск с sudo. Однако для общего обзора памяти это не обязательно.
3. Неправильная интерпретация вывода free (путаница с cached/buffers)
Решение: Не ориентируйтесь на free и used в старых версиях free. Всегда смотрите на available (или вычисляйте: free + buffers + cached). Ядро Linux активно использует свободную память для кэширования, что ускоряет систему, и освободит её при необходимости.
4. Высокое использование памяти, но нет процессов-потребителей
Решение: Возможно, память используется ядром (например, для slab-аллокаторов). Проверьте в /proc/meminfo поля Slab, KernelStack. Также может быть утечка в драйвере или модуле ядра. В таком случае поможет перезагрузка или обновление системы.
5. Утилиты показывают разную информацию
Решение: Разные инструменты могут использовать разные единицы измерения (кБ vs. KiB) или по-разному считать кэши. Всегда сверяйтесь с "истинным источником" — /proc/meminfo.