Есть процесс, который по данным 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%?
можно поковыряться в /proc/(pid)/smaps если я верно понимаю, можно перебрать каждый регион памяти который под что выделен, там подписано - под загружаемый модуль или кеш кучу стек и прочее но не уверен что там тоже будет корректные результаты
я не могу понять где именно течёт: в каком-то процессе или в ядре.
Очевидно, что память "течет" в процессе ######, который сожрал 11Гб, хотя фактически использует только 4Гб. Т.к. swap не используется, значит вся эта память выделена в ОЗУ, выделена, но не используется.