+ -
当前位置:首页 → 问答吧 → 进入子目录的数组

进入子目录的数组

时间:2011-01-31

来源:互联网

正在写一个python脚本,需要统计子进程的内存用量,我看了几种不同的获取进程内存占用的方法,感觉比较晕。

我用了一个简单的C程序统计内存,没有GCC优化:
引用:
#include <stdio.h>
char s[16*1024*1024];
int main(void)
{
char lo[1024*1024];
getchar();
return 0;
}


方法1,cat /proc/PID/status:
有关内存的输出信息为:
VmPeak: 21040 kB
VmSize: 21040 kB
VmLck: 0 kB
VmHWM: 364 kB
VmRSS: 364 kB
VmData: 16432 kB
VmStk: 1032 kB
VmExe: 4 kB
VmLib: 1496 kB
VmPTE: 28 kB
VmSwap: 0 kB
头两个不清楚具体含义,VmData段应该是程序的数据段,就是全局的s变量,大约16MB,符合预期。VmStk应该是栈,1MB左右,也符合预期。VmExe是代码占用的内存,这么小一个程序,代码不多。

方法2:
ps -fp PID -u,输出结果:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
cuihao 8825 0.0 0.0 21040 364 pts/3 S+ 12:02 0:00 ./a.out
VSZ的21040不太理解,网上说是虚拟内存大小,这个虚拟内存应该不是说swap吧。
RSS说是实际开销的物理内存,但只有364KB么?

方法3:
top:
VIRT 21040 RES 364 SHR 288

方法4:
gnome的系统监视器(只是对比一下,写脚本用不了):
内存:80KB 可写内存:80KB 共享内存:288KB 驻留内存:364KB 虚拟内存:20.5MB


究竟程序的内存占用应该怎么计算,这些不同的内存占用之间又有什么关系?望大牛解释。

作者: cuihao   发布时间: 2011-01-31