Ответ
В утилите 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 эффективно используют память, так как совместно используют код библиотек.