top显示的内存各项参数解析
VIRT, RES, SHR, SWAP, CODE, DATA
top实际上是从/proc/<pid>/statm文件中读取这些信息,/proc/<pid>/smaps文件是进程虚拟内存映射的详细数据,我们知道内核的struct page结构有引用计数,如果>1,表示是shared page,否则是private page
VIRT对应于内核的mm->total_vm,包括了进程代码段,数据段所有申请过的虚拟内存,后面会详细阐述
SHR对应于内核的mm->file_rss,代表进程可能是与其他进程共享的内存(不一定是真的共享了,比如打开动态库占用的虚存,未必这个动态库就被其他人也用到)。网上查阅了资料,记入mm->file_rss的内存包括,
程序和动态库代码段的内存,从pmap的结果看,和程序文件大小没啥关系,估计是因为指令不是一次全部加载到代码段里的缘故
通过mmap做的文件映射
通过mmap做的匿名映射,但指明了MAP_SHARED属性
通过shmget申请的共享内存
RES对应于mm->file_rss + mm->anon_rss,我们知道虚拟内存一共有两类,文件页和匿名页,mm->anon_rss就是进程匿名页的大小,匿名页可以是进程独占的,也可以是共享的,比如fork之后COW的那些页就是父子进程共享的,但这些都不会记入SHR,因此可以看出,SHR的大小和共不共享没有半毛钱关系
SWAP表示进程被交换到swap分区的虚拟内存,VIRT = SWAP + RES
CODE表示进程代码段占用的虚拟内存
DATA表示进程数据段占用的虚拟内存
内核通过一个task_statm函数来返回进程内存的使用状况,
int task_statm(struct mm_struct *mm, int *shared, int *text,
int *data, int *resident)
{
*shared = get_mm_counter(mm, file_rss);
*text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK))
>> PAGE_SHIFT;
*data = mm->total_vm - mm->shared_vm;
*resident = *shared + get_mm_counter(mm, anon_rss);
return mm->total_vm;
}
shared是mm->file_rss的内存,这个值是mmap创建但还没有swap出去的虚拟内存页个数
text是进程代码段的虚拟内存页个数,代码段的页是不会被swap出去的
resident包括了shared和mm->anon_rss的虚拟内存页个数,这里的mm->anon_rss是那些未被swap的匿名页。注意进程有可能通过malloc分配的一段内存,但是还没有使用,因此这段虚拟内存还不会map到匿名页上,这段内存的值会被计算到mm->total_vm,但是不会在mm->anon_rss中
data就是进程数据段的虚拟内存页个数,包括swap出去的
关于匿名页,之前的理解有误,确切的说,虚拟内存实际分为匿名页和文件页,文件页包括mmap打开的文件,文件的page cache等,这些页不会被换页算法交换到swap上,因为如果不是脏页,那么可以直接释放,如果是脏页,则直接回写文件;匿名页包括栈堆上面分配的页,以及mmap匿名打开的文件产生的页,这些页是会交换到swap分区的
swap会判断页是否是dirty,只有dirty页才会被回写到磁盘,clean页直接就释放掉了
top显示的内存各项参数解析的更多相关文章
- linux top命令查看内存及多核CPU的使用讲述【转】
转载一下top使用后详细的参数,之前做的笔记找不见了,转载一下,作为以后的使用参考: 原文地址:http://blog.csdn.net/linghao00/article/details/80592 ...
- Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析,通过对LoadModel函数的解析,能够很好理解. ...
- Zookeeper + Hadoop2.6 集群HA + spark1.6完整搭建与所有参数解析
废话就不多说了,直接开始啦~ 安装环境变量: 使用linx下的解压软件,解压找到里面的install 或者 ls 运行这个进行安装 yum install gcc yum install gcc-c+ ...
- 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨) ...
- Linux TOP命令按内存占用排序和按CPU占用排序
先输入top 然后 按P – 以 CPU 占用率大小的顺序排列进程列表 按M – 以内存占用率大小的顺序排列进程列表 top命令是Linux下常用的性能分析工具,比如cpu.内存的使用,能够实时显示系 ...
- argparse - 命令行选项与参数解析(转)
argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...
- Ubuntu 使用top/free查看内存占用大的原因
Ubuntu 使用top/free查看内存占用大的原因 linux/ubuntu下free/top查看内存占用大的原因 使用free/top查看内存占用的时候,吓了一大跳,机器4GB的内存,显 ...
- /proc/sys/ 下内核参数解析
http://blog.itpub.net/15480802/viewspace-753819/ http://blog.itpub.net/15480802/viewspace-753757/ ht ...
- document.execCommand()函数可用参数解析
隐藏在暗处的方法-execCommand() 关键字: javascript document document.execCommand()方法可用来执行很多我们无法实现的操作. execComman ...
随机推荐
- HDU 1937 F - Finding Seats 枚举
F - Finding Seats Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- 用Margin还是用Padding?
用margin还是用padding这个问题是每个学习CSS进阶时的必经之路. CSS边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时 ...
- 使用Bootstrap框架的HTML5页面模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Python】- yield 使用浅析
您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一个常见的编程题目来展示 yield ...
- jQuery 鼠标滚轮事件
使用插件 jquery-mousewheel 下载 $('body').mousewheel(function(event, delta) { ? 'Up' : 'Down'; if (dir == ...
- 关于PDA、GPS等动态资源的几种GIS解决方案
关于PDA.GPS等动态资源的几种GIS解决方案(原创) 今年来GIS发展迅速,特别是实时监控中引入了GPS,PDA等动态资源,使得GIS在各个行业的应用更为广泛. 1.在这些动态资源资源的监控中主要 ...
- 汕头市队赛 SRM10 T1模拟只会猜题意
模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目. 1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ...
- wp检测是否是手机网络还是wifi网络
原文发布时间为:2013-06-22 -- 来源于本人的百度文章 [由搬家工具导入] ),newNameResolutionCallback(handle =>{NetworkInterface ...
- 实现实体类和Xml相互转化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...
- MFC CString GetBuffer/ReleaseBuffer 的使用条件
今天为了通过串口往单片机里写一个16进制字符去控制单片机的adc的起停,结果糊涂到把'\x01'误写成'\0x01',怎么也得不到意想的结果,程序员有时候会犯低级错误,有时候怎么也跳不出去,这时候 ...