Linux top VIRT RES SHR SWAP DATA内存参数详解
对于使用Linux/Unix系统的人来说,top已经是在常用不过的工具了,很多人都知道里面的参数的意思,却很少有人知道这些参数值在程序中是怎么反射出来的。例如:VIRT空间为什么比物理内存大?RES的空间在程序中都包含哪几部分?SWAP交换的都是那些空间?SHR是真正开辟的共享内存空间的大小么?DATA的空间大小指的又是什么,它和RES有那些区别?通过这些内存参数怎么看出我的程序有内存泄露等等问题,待我一一给你解答。
为了搞清楚以上的问题,我们用以下代码进行测试对其一一验证,并得出我们想要的结果。
科普篇:先说下VIRT、RES、SHR、SWAP、DATA这几个参数的意思吧(其他参数不是本篇的重点在此略过,关于top的博客都能找到)。咱们先看下Linux下的那个无所不知的男人怎么说的:
VIRT -- Virtual Image (KB) VIRT = SWAP +RES (公式1)
Thetotal amount of virtual memory used by the task. It includes all code, data andshared libraries plus pages that have been swapped out. (一个任务所使用的虚拟内存的总数。它包括所有的代码,数据和共享库,加上已换出的页面)说的还是比较清楚的,仔细的你或许已经从这段介绍中发现公式1是存在一些问题的(下面会做解释)
RES -- Resident size (KB) RES = CODE + DATA (公式2)
The non-swappedphysical memory a task has used. (一个任务正在使用的没有交换的物理内存)我们一般称为驻留内存空间。先给大家声明,man给出的这个公式2是有问题的,这个错误万恶的公式2估计误导了很多人。
SHR -- Shared Memory size (KB)
The amount ofshared memory used by a task. It simply reflects mem