程序内存用量通常怎么计算?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
送出感谢: 1 次
接收感谢: 89 次
联系:

程序内存用量通常怎么计算?

#1

帖子 cuihao » 2011-01-31 12:18

正在写一个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


究竟程序的内存占用应该怎么计算,这些不同的内存占用之间又有什么关系?望大牛解释。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
回复

回到 “Shell脚本”