近期在公司中解决程序使用的内存高问题,将一部分之前无法回收的内存进行了回收,实现降内存效果(降实存)。

在统计效果时, QA问是统计RES(实存)还是VIRT(虚存)。

在网上学习看了一些博客,这里自己总结一下RES和VIRT的区别。

1. 概念

VIRT:

1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
3、VIRT = SWAP + RES

RES:

1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;
2、包含其他进程的共享;
3、如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。
5、RES = CODE + DATA

SHR:

1、除了自身进程的共享内存,也包括其他进程的共享内存;
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;
3、计算某个进程所占的物理内存大小公式:RES – SHR;
4、swap out后,它将会降下来。

2. 测试

(1) 使用堆分配内存, 进行测试:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4
 5 int main()
 6 {
 7     int test = 0;
 8     //分配512M, 未使用
 9     char * p = new char [1024*1024*512];
10     scanf("%d", &test); //等待输入
11
12     //使用10M
13     memset(p, 0, 1024 * 1024 * 10);
14     scanf("%d", &test); //等待输入
15
16     //使用50M
17     memset(p, 0, 1024 * 1024 * 50);
18     scanf("%d", &test); //等待输入
19     delete [] p;
20     return 0;
21 }

执行:

new 512M后,VIRT/RES

使用10M后,VIRT/RES

使用50M后,VIRT/RES

(2) 使用栈分配内存进行测试:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4
 5 int main()
 6 {
 7     int test = 0;
 8     //20M栈, 未使用
 9     char p[1024*1024*20];
10     scanf("%d", &test);    //等待输入
11
12     //使用10M
13     memset(p, 0, 1024 * 1024 * 10);
14     scanf("%d", &test);    //等待输入
15     return 0;
16 }

执行:

栈上申请20M

使用10M

3. 总结

堆、栈分配的内存,如果没有使用是不会占用实存的,只会记录到虚存。

如果程序占用实存比较多,说明程序申请内存多,实际使用的空间也多。

如果程序占用虚存比较多,说明程序申请来很多空间,但是没有使用。

工作中,遇到过有的程序虚存300G+, 实存只有不到15G。

参考:

1. https://www.cnblogs.com/zmlctt/p/3987181.html

2. https://blog.csdn.net/huyiyang2010/article/details/7815491

linux top命令看到的实存(RES)与虚存(VIRT)分析相关推荐

  1. linux top命令查看内存及多核CPU的使用讲述 [转]

    2019独角兽企业重金招聘Python工程师标准>>> linux top命令查看内存及多核CPU的使用讲述 [转] FROM: http://www.lvtao.net/html/ ...

  2. linux top命令查看内存及多核CPU的使用讲述【转】

    转载一下top使用后详细的参数,之前做的笔记找不见了,转载一下,作为以后的使用参考: 原文地址:http://blog.csdn.net/linghao00/article/details/80592 ...

  3. Linux Top命令详解(载自百度经验)

    Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息.通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. 1 使用S ...

  4. linux top命令简介

    top 命令是最流行的性能监视工具之一,我们必需了解.它是一个优秀的交互式工具,用于监视性能.它提供系统整体性能,但报告进程信息才是 top 命令的长处.top 命令交互界面如下图所视: top 界面 ...

  5. linux top命令 动态查看进程详解

    文章目录 linux top命令 动态查看进程详解以及使用方法 top命令的输出,可分为上下两个部分 上面部分:整个系统的资源的使用状态 下面部分:单个进程的资源使用状态 上面部分详解: 第一行:由三 ...

  6. linux top命令看磁盘,linux top命令详解

    linux top命令详解 下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 ...

  7. Linux top命令参数详解

    Linux top命令参数详解 生产环境系统运行慢,出现无法响应通常原因主要还在于分析CPU.内存.磁盘使用率情况,并结合命令查找出具体进程,并在进程中进一步分析主要因子情况,渗透到对于其中包含线程占 ...

  8. Linux TOP命令各参数详解

    Linux TOP命令参数详解 TOP命令参数详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. ...

  9. top命令参数详解(linux top命令的用法详细详解)

    通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. top命令输出长这样: top命令参数详解(linux top命令的用法详细详解) 以下解析一下各个字段 ...

  10. Linux top命令使用详解

    Linux top命令使用详解 已使用linux系统很长时间,查看整体性能时,经常使用top命令,现将日常运维过程中top命令常见用法汇总整理,以便学习和参考. 本文汇总整理网络资料和自我总结.只用于 ...

最新文章

  1. 缓存穿透、缓存并发、热点缓存之最佳招式
  2. 取某个日期所在周的任意一天日期
  3. uglifyjs报错 webpack_基于vue2.X的webpack基本配置,教你手动撸一个webpack4的配置
  4. Hadoop生态系统介绍
  5. python傅里叶逆变换_OpenCV-Python系列之傅里叶变换
  6. 如何在Java中对Collection对象进行排序?
  7. “如果产品经理躺平接受需求,那程序员免不了想打一架”
  8. 一个基于WF的业务流程平台
  9. Python实现鸢尾花数据集分类问题——基于skearn的LogisticRegression
  10. 桌面计算机怎么显示桌面快捷方式,桌面快捷方式不见了,小编教你桌面快捷方式不见了怎么找回...
  11. AntDesign 实战教程 --------前言
  12. python battleship_一个python初学者的作业,battleship
  13. 不忘初心,持之以恒,笔耕不辍,利人利己
  14. 王道程序员求职宝典 pdf
  15. 万兆局域网方案_万兆内网初体验
  16. 学生成绩等级用c语言,C语言实现学生成绩等级划分的方法实例
  17. 全新原装STM32/GD32可能是假货
  18. 验证码、文件上传和中间件
  19. 利用搜索引擎来搜索特定网站中的关键词
  20. (XK01/XK02/XK03/MK01/MK02/MK03)供应商主数据增强

热门文章

  1. 艾米丽的蜜月旅行Android,美味餐厅:艾米丽的蜜月旅行完整版
  2. 病毒制作实践小记:运行关机、蓝屏炸弹、进程关闭、拓展名病毒
  3. Spring Security如何防止会话固定攻击(session fixation attack)
  4. 认识中药(3)--桔(jie)梗
  5. h0004.双倍 (10 分)
  6. 红外图像盲元检测matlab,红外焦平面阵列盲元类型与判别.pdf
  7. python读Excel数据成numpy数组
  8. hdoj 超级赛亚ACMer (贪心)
  9. 老博客里的另一篇文章《自由与爱情》,实际是一句名言的中英文对照~
  10. 用java处理speex编码/解码