← Назад к вопросам

Что такое резидентная память в Linux?

1.3 Junior🔥 133 комментариев
#Linux и администрирование

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое резидентная память в 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

Основные инструменты для анализа:

  1. Команда ps: Прямой вывод RSS в килобайтах.
    ps -eo pid,rss,comm --sort=-rss | head -10
    
    Пример вывода показывает PID, RSS и имя команды, отсортированные по убыванию использования.

  1. Команда top или htop: Интерактивный мониторинг. В top колонка RES и есть RSS.

    top -o RES
    
  2. Файлы в /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

  1. Мониторинг и алертинг: Мы отслеживаем RSS контейнеров и хостов в Prometheus (через cadvisor или node_exporter) для предотвращения исчерпания памяти и OOM Kill. Скачок RSS часто указывает на проблему (утечку, повышенную нагрузку).

    # Пример PromQL запроса для RSS контейнера
    container_memory_rss{pod="my-app-pod"}
    
  2. Тюнинг и оптимизация: Высокий RSS может быть поводом для:

    *   Оптимизации кода приложения (снижение потребления кучи).
    *   Настройки параметров СУБД (например, `shared_buffers` в PostgreSQL).
    *   Ревизии размера кешей (например, в Redis).

  1. Контейнеризация: В Docker/Kubernetes лимиты памяти (memory.limit_in_bytes cgroups) контролируют именно использование резидентной памяти (+ своп). OOM Killer срабатывает, когда процесс/контейнер превышает свой лимит в RAM.

    # Просмотр использования памяти контейнером
    docker stats <container_id>
    
  2. Диагностика проблем: Если RSS стабильно растёт, а VSZ остаётся постоянной — это классический признак утечки памяти (memory leak) в куче процесса. Если же растут обе, возможно, процесс просто расширяет своё адресное пространство.

Резюме

Resident Set Size (RSS) — это критически важный индикатор фактического давления процесса на оперативную память системы. Для DevOps-инженера умение интерпретировать RSS в связке с VSZ, PSS и контекстом (своп, кеш, OOM события) является базовым навыком для обеспечения стабильности, производительности и эффективного использования ресурсов в инфраструктуре. Мониторинг этой метрики позволяет proactively выявлять аномалии, планировать масштабирование и глубоко анализировать инциденты, связанные с памятью.