Ответ
Анализ использования памяти в Linux требует понимания, что ядро активно использует свободную память для кэширования (cache/buffer), поэтому показатель "free" часто вводит в заблуждение. Ключевой метрикой является available — память, доступная для новых процессов без вытеснения кэша.
Основные команды и их интерпретация:
-
free -h— быстрый обзор:free -hПример вывода и анализ:
total used free shared buff/cache available Mem: 15Gi 4.2Gi 1.1Gi 245Mi 10Gi 10Gi Swap: 2.0Gi 0.0Gi 2.0Giused(4.2Gi): Включает память процессов + часть кэша.buff/cache(10Gi): Память, использованная ядром для дискового кэша и буферов. Она может быть быстро освобождена при необходимости.available(10Gi): Наиболее важный показатель. Оценка памяти, доступной для запуска новых приложений. Она включаетfree+ частьbuff/cache.
-
htop/top— анализ по процессам:htop(интерактивный, с цветом) — мой фаворит. Устанавливается отдельно.- Сортирую по
%MEM(процент от общей RAM) илиRES(resident set size — фактическая физическая память процесса). - Смотрю на
Memстроку вверху, которая также показывает использование.
-
Детальная информация (
/proc/meminfo): Для скриптов или глубокой диагностики.cat /proc/meminfo | grep -E "^(MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree)"
Практический пример — расследование утечки:
Если available память постоянно падает:
- Запускаю
htopи сортирую по%MEM. - Если процесс-виновник неочевиден, использую
smemдля группировки по пользователю или команде:sudo smem -u -s pids - Для профилирования приложения в среде контейнеризации подключаюсь к контейнеру и использую встроенные в язык инструменты (например,
jstatдля JVM) или смотрю cgroup-лимиты черезcat /sys/fs/cgroup/memory/memory.usage_in_bytes.