浅谈Linux内存管理机制

Linux的可定制性比Windows强得多,你想要什么服务及功能就安装什么,不想要就不安装,可以实现系统的最大程度的精简化,这一点Windows是无法做到的。所以,实现同样的功能,Linux比Windows对硬件的要求更低,也正是由于这个原因,很多人陷入了一个误区:Linux内存开销比Windows要小的多。其实不然,Linux的内存开销比Windows要大的多,可以这么说:你有多少内存Linux就”吃“你多少内存。

说到这有些人可能会以为我是在胡扯,用事实说话,以博主的电脑为例,系统:Ubuntu 14.04,看下现在的内存使用情况,先free一下看看使用情况:
free
可以看到可用内存现在只有197M,已经使用7689M,很吓人吧,楼主就打开了几个进程就使用了将近8个G的内存,我们使用top查看一下是什么程序占用了这么大内存,我们以内存使用大小排序:
top
可以看到所有进程加到一起占用也不过百分之十几。难道是系统问题?当然不是。以上面的图片为例,我们简单分析一下Linux的内存管理机制。
在谈Linux的内存管理之前我们先稍微了解一下Windows的内存管理,Windows的内存管理没有什么特别,就是使用多少程序,占用多少内存,所以在Windows下我们如果打开很少的进程,查看任务管理器,可以看到内存使用很低,关闭程序之后,程序所占用的内存也将被释放,然而Linux并不是这样,Linux的观点则是:内存的读写速度相对硬盘来说很快,应该充分被利用起来,如果有多余的内存没有使用则是一种浪费。为了提高文件读取的性能,在程序运行的时候Linux会将要使用的数据暂存到buffers和cache(内存的读写速度比硬盘块的多),以便提高程序的运行速度,当有了新的程序需要内存的时候,系统会释放一部分内存供其使用。有了这样的思想区别,所以就有了Linux占用内存很大的现象。
说到这,有些人又会有一个误区:内存使用率过大就会变得很卡,其实这是一个在Windows平台上的误区,这个观点适用于Windows,并不适用于Linux。更合适的说法是:如果仅从内存方面考虑,内存使用率过大并不是变得很卡的原因,根本原因是没有更多”可利用的”内存可以使用才会卡。

什么是Cache?什么是Buffer?二者的区别是什么?

Buffer和Cache的区别 buffer与cache操作的对象就不一样。

buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。

cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计的,也就是平常见到的一级缓存、二级缓存、三级缓存。 cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存之间增加了cache,它的速度比内存快,但是造价高,又由于在cpu内不能集成太多集成电路,所以一般cache比较小,以后intel等公司为了进一步提高速度,又增加了二级cache,甚至三级cache,它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的。

缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。

简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。 buffer是由各种进程分配的,被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。

cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提高系统性能

我们再仔细看一下free命令,free
我先解释一下他的各个含义:
第一行的total就是总共的意思,used和free是已经使用和空闲内存的意思,shared是指共享内存,buffers指缓冲区内存,cached是指缓存区内存,第二行的Mem表示物理内存,第三行的-/+ buffers/cache有两个数据,第一个是- buffers/cache,他表示被系统实实在在吃掉的内存,而+ buffers/cache则表示可以释放挪用的内存,当你打开新的进程需要内存的时候,系统会自动释放一部分这里的内存。第三行表示虚拟内存,也就是装系统的时候分出来的交换分区,这是磁盘上划分出来的,当内存条上的内存不够用时,这部分就会被利用上。

可以看到物理内存确实使用很多,但是看到真实内存使用却不足2个G。

有了上面的解释就很容易理解为什么Linux占用内存很大了,简单来说就是Linux不会放过任何使用内存的机会,这样可以使程序运行更快,但是当你打开另外一个进程的时候,系统会自动释放部分内存供新的进程使用,所以,看到内存使用过高的时候不用担心,这就是Linux下优秀的内存管理机制,这种机制使得硬件的性能被充分利用,这种内存管理机制比Windows的内存管理更为优秀,只是看起来没有Windows好看而已。所以有这个一个说法:Windows上的内存是用来看的,Linux上的内存是用来用的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值