除此之外,还有一个类似的问题,并在这里回答相同的问题,让人们知道当前的linux proc stat vm信息不准确。
Valgrind可以显示详细信息,但会显着降低目标应用程序的速度,并且大部分时间会改变应用程序的行为。
我假定每个人都想知道WRT“内存使用量”如下...
在linux中,单个进程可能使用的物理内存量大致可以分为以下几类。
- 马匿名映射内存
- .P私人
- .D脏==的malloc/mmapped堆和栈分配和写入内存
- .C干净==的malloc/mmapped堆和堆栈内存一次分配,写入,然后释放,但不回收
- .s共享
- 锰命名映射内存
- .P私人
- .d脏==文件mmapped写入内存专用
- .C干净==映射程序/库文本私有映射
- .S共享
- .D脏==文件mmapped写入内存共享
- .C干净==映射库文本共享映射
我宁愿得到数目如下中至少奥雅纳得到实数rhead。
你必须对这些进行总结,以便将ps节目分为RSS,并获得更准确的数字,以免混淆。
/proc /(pid)/ status会尝试显示这些数字,但它们失败。
因此,我不希望为每个映射标记[anon],[stack],我的愿望是 ,即Linux内核人员将mainline 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:...等