如何理解Linux下,使用top命令看到内存占用情况

linux 下使用top命令之后看到内存占用情况如下:

Mem:  32849260k total, 32630656k used,   218604k free,   445512k buffers
Swap:        0k total,        0k used,        0k free, 12864484k cached

乍一看只有2G的内存剩余,但是真的只有2G的内存了吗?因为看到cached 占用12G,再使用free -m 之后看到的情况

             total       used       free     shared    buffers     cached
Mem:         32079      30975       1103          0        417      11582
-/+ buffers/cache:      18975      13103
Swap:            0          0          0

已经使用的30G内存中看到12G 为cached部分,真正使用的是18G,那么是否可用内存就是有14G呢?

首先了解下Linux内存分配机制
在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

因此cached部分是可以释放掉重新使用的,但是cached部分可以全部释放出来吗?

首先了解下什么是cache 和buffer:
1、Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。
2、Cache(缓存)则是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。
3、假定以后存储器访问变得跟CPU做计算一样快,cache就可以消失,但是buffer依然存在。比如从网络上下载东西,瞬时速率可能会有较大变化,但从长期来看却是稳定的,这样就能通过引入一个buffer使得OS接收数据的速率更稳定,进一步减少对磁盘的伤害。

因此cache 可以回收,但是不全都能回收
具体可参考链接,不展开了

参考链接:
正确理解Linux内存占用过高的问题:http://blog.licess.com/linux-memory/
Linux 内存中的Cache,真的能被回收么?:https://www.cnblogs.com/276815076/p/5478966.html
Cache 和 Buffer 都是缓存,主要区别是什么?:https://www.zhihu.com/question/26190832/answer/32387918

猜你喜欢

转载自blog.csdn.net/marywang56/article/details/82495511