在Windows下的资源管理器中查看内存使用情况。如果使用率达到80%以上,运行大型程序时会感觉系统不流畅,因为swap分区在内存紧缺的情况下被频繁使用。在磁盘上交换页面进出会极大地影响系统性能。而当我们使用free命令查看Linux系统的内存占用情况时,会发现内存占用一直处于高位,即使此时系统运行的软件不多。这就是Windows和Linux在内存管理上的区别。乍一看,Linux系统吃我们的内存(Linuxatemyram),其实这也是它内存管理的特点。free命令介绍下面是使用free命令查看我们实验室文件服务器内存的结果。-m选项表示单位是MB:输出的第二行表示系统内存的使用情况:Mem:total(总计)=3920MB,used(已用)=1938MB,free(自由)=1982MB,shared(sharedmemory)=0MB,buffers=497MB,cached=1235MB注:前四项比较好理解,buffer和cache找不到合适的词翻译,它们的区别是:Abufferissomethingthathaveto被“写入”到磁盘。缓存是从磁盘“读取”并存储以备后用的东西。即buffer用于存储输出到磁盘的数据,而cache则从磁盘读取数据并存储到内存中以备后用。引入它们是为了提供IO性能。输出的第三行表示在第二行的基础上得到了什么-/+buffers/cache:–buffers/cacheused=Memused–buffers–cached=1938MB–497MB–1235MB=205MB+buffers/cachefree=Memfree+buffers+cached=1982MB+497MB+1235MB=3714MB输出的第三行表示swap分区的使用情况:Swap:total(总计)=4095MBused(已用)=0MBfree(空闲)=4095MB由于系统当前有足够的内存,Swap分区没有被使用。上面输出的结果比较难理解。可能是第三行。为什么要把这行数据显示给用户呢?内存使用减去系统缓冲区/缓存内存是什么意思?系统空闲内存加上缓冲/缓存内存是什么意思?内存的分类我们把内存分为三类,从用户和操作系统的角度对它的用途有不同的称呼:Memorythatis你会叫它Linux叫它被应用程序占用UsedUsed应用程序可用,用于某些事情FreeUsed没有用于任何用途FreeFree上表中的something代表free命令中的“buffers/cached”内存,因为从操作系统的角度来看确实使用了这块内存,但是如果用户想要使用,这块内存可以被用户程序快速回收和使用,所以从用户的角度来看,这块内存应该归类为空闲。再次回到free命令的输出,第三行的输出应该是可以理解的。从用户的角度来看,这一行中的数字代表系统内存的使用情况。因此,如果使用top或free命令查看系统还剩多少内存,实际上应该将freememory加到buffer/cachedmemory中,也就是系统实际的freememory。buffers/cached的好处Linux内存管理做了很多精心的设计。除了缓存dentry(在VFS中用于加速文件路径名到inode的转换)之外,它还采用了两种主要的Cache方式:BufferCache和PageCache。就是为了提高磁盘IO的性能。从低速块设备读取的数据会暂时保存在内存中,即使此时不再需要数据,但下次应用程序访问数据时,可以直接从内存中读取,从而绕过低速速度块设备,从而提高系统的整体性能。而Linux会充分利用这些空闲内存。设计思路是,如果内存空闲,不如用它来缓存一些数据,下次程序再次访问数据时,速度会更快,这时候不使用交换分区,而是快速回收一部分缓存,留给用户程序使用。因此,可见buffers/cached真是百利而无一害。真正的缺点可能会让用户产生一种错觉——Linux很耗内存!其实不是这样的,linux是不吃你内存的,只要还没有用到swap分区,当你内存不足的时候,你应该庆幸,因为linux缓存了很多数据,也许你下次会受益。实验证明通过实验验证以上结论:我们依次读取一个大文件,对比两次读取的做法:1.先生成一个1G的大文件2.清除缓存3.读取这个文件并测试消耗时间4.再次读取文件。从上面可以看出测试消耗的时间。1G的文件第一次读取需要18s左右,第二次读取再次读取只需要0.3s,这是一个全面的提升。60次!
