Когда система тормозит, первым делом смотрят
top или ps, но эти инструменты вводят в заблуждение. Они показывают RSS (Resident Set Size), который считает общую память как свою.Например: если 5 процессов используют одну и ту же библиотеку на 100 МБ, RSS прибавит по 100 МБ к каждому, хотя в реальности эта память занимает только 100 МБ в RAM.
Чтобы понять реальный вклад процесса в потребление памяти, нужно смотреть PSS (Proportional Set Size) — метрику, которая делит общую память пропорционально между всеми пользователями.
📊 Три ключевые метрики:
- VSZ (Virtual Set Size) — общий виртуальный объём памяти, выделенный процессу.
→ Включает код, данные, библиотеки, маппинг файлов… но многое из этого может вообще не быть в RAM.
→ Не показывает реальное потребление RAM.
- RSS (Resident Set Size) — сколько памяти процесса фактически загружено в RAM сейчас.
→ Но считает общую память целиком, даже если она используется десятком других процессов.
→ Завышает реальное потребление.
- PSS (Proportional Set Size) — настоящий объём памяти, который освободится при завершении процесса.
→ Общая память делится поровну: если 3 процесса используют библиотеку на 90 МБ → каждый «платит» по 30 МБ.
→ Это самая точная метрика для оценки нагрузки на RAM.
🔧 Как получить PSS?
1. Найдите PID процесса:
pidof nginx
# или
ps aux | grep nginx
🔍 Как точно измерить, сколько памяти реально использует процесс в Linux
Когда система тормозит, первым делом смотрят
top или ps — но эти инструменты вводят в заблуждение. Они показывают RSS (Resident Set Size), который считает общую память как свою.Например: если 5 процессов используют одну и ту же библиотеку на 100 МБ, RSS прибавит по 100 МБ к каждому — хотя в реальности эта память занимает только 100 МБ в RAM.
Чтобы понять реальный вклад процесса в потребление памяти, нужно смотреть PSS (Proportional Set Size) - метрику, которая делит общую память пропорционально между всеми пользователями.
📊 Три ключевые метрики:
- VSZ (Virtual Set Size) — общий виртуальный объём памяти, выделенный процессу.
→ Включает код, данные, библиотеки, маппинг файлов… но многое из этого может вообще не быть в RAM.
→ Не показывает реальное потребление RAM.
- RSS (Resident Set Size) — сколько памяти процесса фактически загружено в RAM сейчас.
→ Но считает общую память целиком, даже если она используется десятком других процессов.
→ Завышает реальное потребление.
- PSS (Proportional Set Size) — настоящий объём памяти, который освободится при завершении процесса.
→ Общая память делится поровну: если 3 процесса используют библиотеку на 90 МБ → каждый «платит» по 30 МБ.
→ Это самая точная метрика для оценки нагрузки на RAM.
🔧 Как получить PSS?
1. Найдите PID процесса:
pidof nginx
# или
ps aux | grep nginx
2 Посчитайте суммарный PSS через /proc/[PID]/smaps:
sudo awk '/^Pss:/ { total += $2 } END { print total " kB" }' /proc/12345/smaps
Или, если у вас ядро Linux ≥ 4.15 — используйте готовую сводку:
sudo cat /proc/12345/smaps_rollup | grep Pss:
💡 Пример: процесс может показывать RSS = 800 МБ, но PSS = 120 МБ. Это значит, что только 120 МБ — его реальный вклад в использование RAM, остальное - общие библиотеки.
✅ Вывод
• Не доверяйте RSS из top или ps — он завышает потребление.
• Используйте PSS, чтобы понять, сколько памяти реально освободится, если убить процесс.
• Для точной диагностики всегда смотрите в /proc/[PID]/smaps или /proc/[PID]/smaps_rollup.
Источник: How to Accurately Check Memory Consumption of a Process in Linux
