但file_rss为什么叫做shared呢?应该是一种指示性表述,表示这部分内存可能是共享的。但并不代表真正共享了。那么到底哪些计入file_rss?通过查阅相关代码,发现(可能有遗漏):
1、程序的代码段。
2、动态库的代码段。
3、通过mmap做的文件映射。
4、通过mmap做的匿名映射,但指明了MAP_SHARED属性。
5、通过shmget申请的共享内存
注:如何精确的计算进程占用的内存
我们注意到在描述进程信息的proc/<pid>内,有一个smaps文件,里面展示了所有内存段的信息,其中有Shared_Clean Shared_Dirty Private_Clean Private_Dirty:几个字段。
统计smaps文件内所有段的Shared_*值的总和就是进程准确的共享内存数量!
统计smaps文件内所有段的Private_*值的总和就是进程准确的独占内存数量!
S -- 进程状态
%CPU -- 自上次刷新以来该进程占用的总cpu时间的百分比.在一个true SMP environment(真正的对称多处理器环境)下,如果’Irix mode’关闭(默认为打开状态),top将运行在’Solaris mode’,此模式下一个任务的cpu使用率将会被除以CPU数量之后显示。通过 I 命令可以交互式关闭/打开此模式
%MEM -- 任务使用物理内存的百分比
TIME+ -- (ms)和time类似,以毫秒为单位显示
P -- 上一次用到的cpu,在‘多cpu环境下’显示该进程上一次使用的cpu节点
SWAP -- (kb)任务的总虚拟内存镜像被换到交换分区的部分。看到一篇博客说:这里应该是改进程使用过的swap的量
另:top汇总部分swap信息里面cached的部分表示的是曾经换入swap后又被换出,但是swap里的内容还未被覆盖的部分
Swap: 32767992k total, 986504k used, 31781488k free, 2740516k cached
TIME -- (s)任务自启动以来占用的CPU总时间。如果’Cumulative mode’(累计模式,默认关闭)打开,将显示此简称以及此进程的子进程(包括已死的)总共占有的cpu时间。累计模式可以通过命令行和交互式两种模式打开
例如下图:TIME+表示9517s33ms;TIME 表示158m37
CODE -- (kb)用来‘执行程序代码’的物理内存/存放进程代码的物理内存
DATA -- (kb)Data+Stack size。进程占用实体内存中的非程序码部份的大小
COMMAND -- 启动进程的命令
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-02/114109.htm