Что такое резидентная память в Linux?
Комментарии (3)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое резидентная память в Linux?
В Linux, резидентная память (Resident Set Size, RSS) — это часть памяти процесса, которая фактически находится в оперативной памяти (RAM) в данный момент времени. Это ключевая метрика для понимания того, сколько физической памяти реально использует процесс, исключая данные, которые были вытеснены в своп (swap) или ещё не подгружены из файлов.
Детальное объяснение RSS
RSS включает в себя:
- Код программы (text segment): исполняемые инструкции.
- Данные (data segment): глобальные и статические переменные.
- Стек (stack) и куча (heap): динамически выделяемая память.
- Разделяемые библиотеки: те части библиотек, которые были загружены в память для данного процесса.
- Файлы, отображённые в память (memory-mapped files): которые в данный момент резидентны.
Важно: RSS — это не общий объём выделенной процессу памяти (что ближе к Virtual Memory Size, VSS), а именно та её часть, которая занимает "ценное" пространство в RAM. Если системе не хватает оперативной памяти, ядро может вытеснить часть резидентных страниц процесса в своп-область на диске, и они перестанут учитываться в RSS.
Как посмотреть Resident Memory
Основные инструменты для анализа:
- Команда
ps: Прямой вывод RSS в килобайтах.ps -eo pid,rss,comm --sort=-rss | head -10
Пример вывода показывает PID, RSS и имя команды, отсортированные по убыванию использования.
-
Команда
topилиhtop: Интерактивный мониторинг. Вtopколонка RES и есть RSS.top -o RES -
Файлы в
/proc: Наиболее детальная информация. RSS процесса с PID 1234 находится в/proc/1234/status.grep -E 'VmRSS|VmSwap' /proc/1234/status
`VmRSS` показывает резидентную память, а `VmSwap` — сколько вытеснено в своп.
Отличия RSS от других метрик памяти
- VSZ (Virtual Memory Size): Вся виртуальная память, выделенная процессу. Она может быть намного больше RSS, так как включает неподгруженные библиотеки, зарезервированную, но неиспользуемую (allocated but not touched) память в куче, и своп.
# VSZ vs RSS ps -eo pid,vsz,rss,comm --sort=-vsz | head -5 - USS (Unique Set Size): Память, уникальная для данного процесса (не разделяемая). Это лучший индикатор "реальной" стоимости процесса. Измеряется инструментами вроде
smem.smem -p -P firefox - PSS (Proportional Set Size): RSS, но разделяемая память распределена пропорционально между всеми процессами, которые её используют (например, библиотека
libc). PSS = USS + (Разделяемая память / Количество процессов-владельцев). Это наиболее точная метрика для оценки нагрузки на RAM.
Практическое значение для DevOps/SRE
-
Мониторинг и алертинг: Мы отслеживаем RSS контейнеров и хостов в Prometheus (через
cadvisorилиnode_exporter) для предотвращения исчерпания памяти и OOM Kill. Скачок RSS часто указывает на проблему (утечку, повышенную нагрузку).# Пример PromQL запроса для RSS контейнера container_memory_rss{pod="my-app-pod"} -
Тюнинг и оптимизация: Высокий RSS может быть поводом для:
* Оптимизации кода приложения (снижение потребления кучи).
* Настройки параметров СУБД (например, `shared_buffers` в PostgreSQL).
* Ревизии размера кешей (например, в Redis).
-
Контейнеризация: В Docker/Kubernetes лимиты памяти (
memory.limit_in_bytescgroups) контролируют именно использование резидентной памяти (+ своп). OOM Killer срабатывает, когда процесс/контейнер превышает свой лимит в RAM.# Просмотр использования памяти контейнером docker stats <container_id> -
Диагностика проблем: Если RSS стабильно растёт, а VSZ остаётся постоянной — это классический признак утечки памяти (memory leak) в куче процесса. Если же растут обе, возможно, процесс просто расширяет своё адресное пространство.
Резюме
Resident Set Size (RSS) — это критически важный индикатор фактического давления процесса на оперативную память системы. Для DevOps-инженера умение интерпретировать RSS в связке с VSZ, PSS и контекстом (своп, кеш, OOM события) является базовым навыком для обеспечения стабильности, производительности и эффективного использования ресурсов в инфраструктуре. Мониторинг этой метрики позволяет proactively выявлять аномалии, планировать масштабирование и глубоко анализировать инциденты, связанные с памятью.