Как понять на что расходуется память в linux?

Есть процесс, который по данным top потребляет 13,5% оперативной памяти. Однако по данным free используется памяти - 67,2%. Как понять куда ушла остальная память?

Пытался исследовать проблему при помощи таких инструментов как /proc/meminfo, /proc/PID/status, free, top, smem.
Что мы имеем: занятую процессами память считаю по данным из /proc/meminfo по формуле MemTotal-Free-Cached-Buffers-Slab, получается та же величина, что показывает free в строке used, где-то 67,2% в отношении к MemTotal, при этом эта величина увеличивается со временем, память "течёт", но я не могу понять где именно течёт: в каком-то процессе или в ядре.
Если исследовать процессы, то вот top мне показывает 3 столбца: VIRT, RSS и SHR, память каждого процесса состоит из RSS и SHR, но поскольку SHR - это разделяемая память, используемая одновременно несколькими процессами, то суммировать эти столбцы нельзя. Тогда я вместо top использовал smem, который вычисляет такую величину как PSS - пропорциональная память, которую уже можно суммировать, также smem умеет вычислять сумму всех процессов в процентах, так вот он мне показал - 16,2% в то время как free говорит, что занято 67,2, вопрос - куда ушли оставшиеся 51%?
  • Вопрос задан
  • 1661 просмотр
Пригласить эксперта
Ответы на вопрос 3
@unseriously
не благодари:
ps axo rss,comm,pid | awk '{ proc_list[$2] += $1; } END { for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' | sort -n | tail -n 10 | sort -rn | awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'
Ответ написан
@vitaly_il1
DevOps Consulting
Покажите, пож-ста

- free -m
- top -b -o +%MEM | head -n 25
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы