Существует аналогичный вопрос, отличный от этого, и отвечая на то же самое здесь, чтобы люди знали о том, как в настоящее время информация о статусе linux proc stat vm неточна.
Valgrind может отображать подробную информацию, но значительно замедляет целевое приложение и большую часть времени изменяет поведение приложения.
Я предполагаю, что все хотят знать, что использование памяти «WRT» является следующим ...
В linux количество физической памяти, которую может использовать один процесс, можно условно разделить на следующие категории.
- Ма анонимным сопоставляются памяти
- .p частный
- .d грязного == таНос/mmapped кучи и стека выделяется и написано модуля памяти
- .c чистый == таНос/mmapped кучу и стоп-память, выделенная, написанная, затем освобожденная, но не исправленная
- .s shared
- .d загрязнен == не должно быть ни
- .c чистый == не должно быть ни
- Mn назвал карту памяти
- .p частный
- .d грязный == файл mmapped запись приватная
- .c чистый == отображается текст программы/библиотеки частным сопоставляются
- .са совместно
- .d грязного файл == mmapped написал память совместно
- .c чистого == сопоставляется библиотека текст поделилась сопоставляется
Я бы предпочел, чтобы получить числа следующим образом, чтобы получить действительные числа в наименее Ове rhead.
Вы должны суммировать их, чтобы разделить то, что показывает ps как RSS, и получать более точные цифры, чтобы не путать.
/proc/(pid)/status пытается показать эти цифры, но они не работают.
Таким образом, вместо того, чтобы пытаться помечать [anon], [stack], правильно для каждого сопоставления, мое желание , что люди ядра Linux будут использовать код ввода proc для суммирования и отображения этих Mapd, Mapc, Mnpd, .... номера.
Встраиваемые Linux-пользователи получат действительно счастливое ИМХО.
M.a.p.d:
awk '/^[0-9a-f]/{if ($6=="") {anon=1}else{anon=0}} /Private_Dirty/{if(anon) {asum+=$2}else{nasum+=$2}} END{printf "sum=%d\n",asum}' /proc/<pid>/smaps
M.a.p.c:
awk '/^[0-9a-f]/{if ($6=="") {anon=1}else{anon=0}} /Private_Clean/{if(anon) {asum+=$2}else{nasum+=$2}} END{printf "sum=%d\n",asum}' /proc/<pid>/smaps
M.n.p.d: ... и так далее