Какие существуют метрики использования памяти в Linux
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные метрики использования памяти в Linux
В Linux мониторинг памяти — критически важная задача для DevOps/SRE инженеров, так как нехватка памяти может привести к деградации производительности, OOM Kill процессов и полной остановке системы. Я разделю метрики на несколько категорий для лучшего понимания.
1. Ключевые метрики из /proc/meminfo и утилит
Основной источник информации — файл /proc/meminfo. Его данные используют все утилиты мониторинга (free, top, vmstat).
# Пример просмотра информации о памяти
cat /proc/meminfo
# Использование утилиты free
free -h
Основные поля:
- MemTotal: Общий объем физической RAM
- MemFree: Память, не используемая вообще
- MemAvailable: Реально доступная память для новых процессов (важнейшая метрика!)
- Buffers: Временное хранилище для raw блоков диска
- Cached: Кэш страниц, включая содержимое файлов
- SwapTotal / SwapFree: Общий и свободный swap
- Active / Inactive: Активная и неактивная память в кэше
- Dirty: Данные, ожидающие записи на диск
- AnonPages: Анонимные страницы (память процессов)
- Mapped: Файлы, отображенные в память
2. Критические метрики для мониторинга
Использование памяти (Memory Utilization)
# Расчет использования
Использование = (MemTotal - MemAvailable) / MemTotal * 100%
Это самый важный показатель — сколько памяти реально занято.
Доступная память (Available Memory)
MemAvailable — современная замена MemFree. Учитывает, что часть кэша можно немедленно освободить.
Swap использование (Swap Usage)
# Проверка swap
swapon --show
vmstat -s | grep swap
Высокое использование swap указывает на нехватку физической памяти.
Своппинг (Swapping Activity)
# si (swap in) и so (swap out) в vmstat
vmstat 1
- si (swap in): Страниц/сек, загружаемых с swap
- so (swap in): Страниц/сек, выгружаемых в swap
Высокие значения указывают на "thrashing" — систему "перекладывания" памяти.
3. Продвинутые метрики
Pressure Stall Information (PSI)
Современный механизм ядра Linux для измерения нехватки ресурсов:
# Просмотр PSI для памяти
cat /proc/pressure/memory
# Пример вывода
some avg10=5.23 avg60=12.45 avg300=45.67 total=123456789
full avg10=1.23 avg60=3.45 avg300=12.34 total=23456789
- some: Процент времени, когда ХОТЯ БЫ ОДНА задача ждет память
- full: Процент времени, когда ВСЕ задачи ждут память
PSI лучше традиционных метрик показывает "стесненность" памяти.
Распределение памяти по типам
# Детальное распределение
cat /proc/meminfo | grep -E "(AnonPages|PageTables|Shmem|Slab|KernelStack)"
- Slab: Память ядра для структур данных
- PageTables: Память для таблиц страниц
- KernelStack: Стек ядра для процессов
Использование памяти процессами
# Просмотр через top (сортировка по памяти)
top -o %MEM
# Или через ps
ps aux --sort=-%mem | head -20
- RES (RSS): Физическая память процесса
- VIRT: Вся виртуальная память (включая отображенные файлы, swap)
- SHR: Разделяемая память
Важно: RSS процессов может суммироваться больше общей памяти из-за разделяемых библиотек.
4. Практические примеры мониторинга
Настройка алертов в Prometheus
# Пример alert rules для памяти
groups:
- name: memory.rules
rules:
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
for: 5m
annotations:
description: 'Memory usage is above 90% for 5 minutes'
- alert: HighMemoryPressure
expr: rate(node_memory_pressure_some_seconds_total[5m]) > 0.05
annotations:
description: 'Memory pressure some > 5%'
Анализ с помощью инструментов
# Комплексный анализ
# 1. Общая картина
free -h
# 2. Детализация кэша
cat /proc/meminfo | grep -E "(Cached|Dirty|Writeback)"
# 3. Использование slab
slabtop -o | head -20
# 4. Процессы
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -20
# 5. Проверка OOM score
cat /proc/[PID]/oom_score
5. Рекомендации по интерпретации
Здоровые показатели:
MemAvailable> 10-20% отMemTotalsiиsoблизки к 0 в стабильной системе- PSI some < 1-2% большую часть времени
Тревожные сигналы:
MemAvailableприближается к 0- Высокие значения
si/so(> 100 страниц/сек) - Растет
Dirtyпамять (проблемы с IO) - Частые OOM kills
Важно понимать: Linux агрессивно использует свободную память для кэша (Cached), поэтому MemFree часто низкий при здоровой системе. Всегда ориентируйтесь на MemAvailable и PSI метрики для реальной оценки нагрузки на память.