/proc/PID/status
содержит несколько полезных фрагментов информации (например, попробуйте запустить cat /proc/$$/status
).
VmPeak
- это наибольшее пространство виртуальной памяти вашего процесса, когда-либо имевшее место при его выполнении.Это включает в себя все страницы, отображенные в вашем процессе, включая исполняемые страницы, файлы mmap, стек и кучу.
VmSize
- текущий размер пространства виртуальной памяти вашего процесса.
VmRSS
- размер резидентного набора вашего процесса;то есть, сколько из этого занимает физическая оперативная память прямо сейчас.(Типичный процесс будет иметь много сопоставленных материалов, которые он никогда не использует, как большая часть библиотеки C. Если процессам страница не нужна, в конечном итоге она будет удалена и станет нерезидентной. RSS измеряет страницы, которые остаются резидентными и отображаютсяв ваш процесс.)
VmHWM
- Знак Высшей Воды VmRSS
;то есть наибольшее это число было за время существования процесса.
VmData
- размер сегмента «данных» вашего процесса;то есть примерно его использование кучи.Обратите внимание, что небольшие блоки, над которыми вы сделали malloc
, а затем free
, все еще будут использоваться с точки зрения ядра;большие блоки будут возвращены ядру после освобождения.(Если память служит, «большой» означает больше, чем 128k для текущего glibc.) Это, вероятно, самое близкое к тому, что вы ищете.
Эти измерения, вероятно, лучше, чем попытки отследить malloc и free, поскольку ониуказать, что "на самом деле происходит" с точки зрения всей системы.То, что вы вызвали free()
для некоторой памяти, не означает, что она была возвращена в систему для использования другими процессами.