当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 程序内存用量通常怎么计算?
帖子发表于 : 2011-01-31 12:18 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
正在写一个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: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译