Что означает колонка SHR в htop?

«Что означает колонка SHR в htop?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В утилите htop колонка SHR (Shared Memory) показывает объём резидентной памяти (RES), которая является разделяемой (shared) между несколькими процессами.

Что туда входит:

  • Разделяемые библиотеки (shared libraries), такие как libc.so. Если 10 процессов используют одну и ту же библиотеку, она физически загружена в RAM один раз, но в SHR каждого процесса будет учтена её часть.
  • Сегменты разделяемой памяти (SHM), созданные через shmget()/mmap().

Практический пример из htop:

PID  USER     PRI  NI  VIRT   RES    SHR   S  CPU%  MEM%  TIME+    Command
1234 nginx     20   0   250M   50M    8M    S   0.7   1.2   10:00.01  nginx: worker process

Здесь у воркера Nginx RES=50M, из них 8M — это разделяемая память (скорее всего, бинарник Nginx и общие библиотеки). Остальные 42M — это приватная резидентная память процесса.

Зачем это нужно:

  • Диагностика утечек памяти: Высокий RES при низком SHR может указывать на утечку в приватной памяти процесса.
  • Оптимизация использования RAM: Множество однотипных процессов (например, воркеры PHP-FPM, контейнеры) с высокой долей SHR эффективно используют память, так как совместно используют код библиотек.