1、背景
如果一个进程内存消耗太多,那么会导致整个系统内存紧张,而出现OOM等。所以我们经常会需要统计整个系统各个进程内存消耗的情况。一般对一个进程的内存的表示有4种方式:VSS、RSS、PSS、USS,那么什么时候应该用哪种方式统计呢?
我们需要先了解他们的差别:
VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的全部内存,以及分配但未使用内存)
RSS- Resident Set Size 实际使用物理内存(包含共享库占用的全部内存)
PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
2、例子
2.1 无内存分配的helloworld
我们写一个helloworld程序,仅仅打印点东西出来:
#include <stdio.h>
int main()
{
printf("======== begin\n");
// char aa[1048576*2];
// memset(aa, 0, sizeof(aa));
// printf("======== end size:%d\n", sizeof(aa));
while(1)
{
// sleep(5);
}
return 0;
}
注意:以上循环里我把sleep那一行注释掉了,目的是通过top查看的时候方便看到其结果。
我们编译,运行,然后top看结果:
$ gcc main.c -o mymain
$ ./mymain &
[1] 9454
$ ======== begin$ top
top - 09:24:49 up 22:16, 1 user, load average: 1.62, 1.29, 1.11
Tasks: 160 total,