ubuntu  内存占用解析

最近在使用电脑的时候,使用top 命令,发现ubuntu内存使用很紧张:

我的电脑是512 Mb的内存,可以看到使用了467Mb  还剩8Mb了,但是打开系统监视器的时候

可以看到两个内存显示不一样,到底以哪一个为准呢?仔细观察一下,命令行中的cached占用的内存161456k

加上系统监视器的306Mb,差不多就是现在内存使用的情况467Mb。

网上查了一下:

用free -m命令查看

lyh@lyh-desktop:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           464        414         49          0          3        120
-/+ buffers/cache:        290        173
Swap:          445         23        422

然后第一行那个464是总共使用的内存,连cache也算进去了,不用看,第二行290才是真正的占用了。173是空闲的。

也就是说使用了290Mb的内存

参见:

Linux 内存机制

Mem:表示物理内存统计。
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况。只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap。

Mem 行(第一行)数据说明:

Total:1035108KB。表示物理内存总大小。

Used:1008984KB。表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

Free:26124KB。表示未被分配的内存。

Shared:0kb。共享内存,一般系统不会用到。

Buffers:124212KB。系统分配但未被使用的buffers 数量。

Cached:413000KB。系统分配但未被使用的cache 数量。

-/+ buffers/cache 行(第二行)数据说明:

Used:471772kb,实际使用的buffers 与cache 总量,也是实际使用的内存总量。

Free: 563336kb, 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

根据以上分析,可以得出一下结论:

1. 实际可用内存大小:

Free(-/+ buffers/cache行)= Free(Mem)+buffers(Mem)+Cached(Mem);

563336 = 26124 + 124212+ 413000

2. 已经分配的内存大小:

Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)

1008984kb = 471772 + 124212 +413000

3. 物理内存总大小

total(Mem)= used(-/+ buffers/cache) + free(-/+ buffers/cache)

1035108 = 471772 + 563336

二. buffer 与cache 的区别

A buffer is something that has yet to be "written" to disk.

A cache is something that has been "read" from the disk and stored for later use.

2.1 Cache

Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。

由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。

Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

2.2 Buffer

Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

在Free命令中显示的buffer和cache,它们都是占用内存:

buffer : 作为buffer cache的内存,是块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区。

cache: 作为page cache的内存, 文件系统的cache,是memory的缓冲区

如果cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小

free命令里各项内存指标说明:

total used free shared buffers cached
Mem: 16425996 10727220 5698776 0 380904 9389832
-/+ buffers/cache: 956484 15469512
Swap: 8273464 212 8273252

其中第一行用全局角度描述系统使用的内存状况:
total——总物理内存
used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
free——完全未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
cached——缓存,用于已打开的文件
总结:
total=used+free
used=buffers+cached (maybe add shared also)

第二行描述应用程序的内存使用:
前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值
后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值
总结: 
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached

第三行表示swap的使用:
used——已使用
free——未使用

什么是Cache Memory(缓存内存):

当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。

其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。如果你希望手动去释放Cache Memory也是有办法的。

如何释放Cache Memory(缓存内存):

用下面的命令可以释放Cache Memory:

To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

注意,释放前最好sync一下,防止丢失数据。

参考地址:http://hi.baidu.com/yacker/item/3926ceda78032230e3108f09

ubuntu 内存占用解析相关推荐

  1. ubuntu 内存占用过高导致卡死 解决办法

    前言 如果本文存在问题,请指出,谢谢! 文章目录 前言 一.具体表现 二.原因 三.解决方案 四.其他优化 总结 一.具体表现 例如下图 注:图示版本为ubuntu18.04,现在我用的是ubuntu ...

  2. mariadb 内存占用优化

    本文由云+社区发表 作者:工程师小熊 摘要:我们在使用mariadb的时候发现有时候不能启动起来,在使用过程中mariadb占用的内存很大,在这里学习下mariadb与内存相关的配置项,对mariad ...

  3. Java程序内存分析:使用mat工具分析内存占用

    1. 用jmap生成堆信息 2. 将堆信息导入到mat中分析 3. 生成分析报告 Histogram Dominator Tree Top consumers Leak Suspects MAT 不是 ...

  4. windows2008开机占用多少内存_Android内存占用分析

    思考的问题: 1.为什么/proc/meminfo中的内存总大小比物理内存小? 2.怎么看Android还剩多少可用内存比较准确? 3.怎么看Kernel的内存占用比较准确? 4.是哪些因素影响了Lo ...

  5. Linux内存占用分析的几个方法,你知道几个?

    0. 引言: 系统内存是硬件系统中必不可少的部分,定时查看系统内存资源运行情况,可以帮助我们及时发现内存资源是否存在异常占用,确保业务的稳定运行. 例如:定期查看公司的网站服务器内存使用情况,可以确保 ...

  6. 电脑是否存在内存泄漏_STM32裸机内存管理解析

    概述 在计算机系统中,变量.中间数据一般存放在系统存储空间中,只有实际使用的时候才将他们从存储空间调入到中央处理器内部进行计算.通常存储空间分为两类:内部存储空间和外部存储空间.对于电脑来讲,内部存储 ...

  7. linux 省内存的桌面,Linux_在Linux中可视化显示内存占用情况的方法,物理内存不足对Linux桌面系统 - phpStudy...

    在Linux中可视化显示内存占用情况的方法 物理内存不足对Linux桌面系统和服务器系统的性能影响都很大.当你的计算机变慢时,要做的第一件事就是释放内存.尤其是在多用户环境以及执行关键任务的服务器环境 ...

  8. linux服务器 top 查看 内存占用详情

    前言 前几天登录云服务器突然发现没几个服务内存竟然快占满了,于是赶快top查看,发现直接top查看的话 也不太好分析是哪个应用占用的内存比较大,于是谷歌了一番记录了以下几种查内存占用情况的方法. 查看 ...

  9. 写一段代码提高内存占用_记录一次生产环境中Redis内存增长异常排查全流程!...

    点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 最近 DBA 反馈线上的一个 Redis 资源已经超过了预先设计时的容量,并且已经进行了两次扩容,内存增长还在持续中,希望业务方排查一下容量 ...

最新文章

  1. 教育部要求:作业、校外培训、游戏要为学生睡眠让路
  2. 分享18个常用的网站性能测试工具
  3. python数据分析包pandas_Python 数据分析包:pandas 基础
  4. div方框弯曲边样式_使用弯曲样式编辑文本
  5. 02.2-元素定位(XPath)
  6. 前端学习(2817):全局page配置文件
  7. openstack实例启动失败_Nokia NESC,这是世界上最大的OpenStack私有云之一
  8. Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
  9. Teechart图表教程:Teechart的组成
  10. matlab中李亚普诺夫方程,李亚普诺夫函数.ppt
  11. 自然图像中的logo识别和定位:Logo localization andrecognition in natural images using homographic class graphs
  12. HIT 软件构造2019春 Lab3
  13. Youtube 开发通过遥控机控制实现快进快退功能
  14. spark-streaming 编程(五)updateStateByKey
  15. Foundation框架 之 常见结构体、包装数据、日期
  16. 【Python入门教程】第45篇 集合的并集
  17. 补交20145226蓝墨云班课 -- 后缀表达式
  18. blp和biba属于哪种访问控制_CISP官方信息安全技术章节练习二
  19. 细侃那些悬而未决的数学趣味谜题
  20. Python爬虫六:字体反爬处理(猫眼+汽车之家)-2018.10

热门文章

  1. Python爬虫入门(4):Urllib库的高级用法
  2. 随机重命名MP3文件
  3. 图像检索中相似度度量公式:各种距离
  4. LINUX安装REDIS集群
  5. BPM助力先声药业优化流程管理
  6. ionic 实用技巧
  7. 科沃斯旺宝与阿里云联合参加通信展
  8. Android快速开发框架-ZBLibrary 源码分享
  9. POJ--3268--Silver Cow Party【SPFA+邻接表】
  10. 自定义ListView背景(解决了拖动变黑的效果)