在Windows下的资源管理器中查看内存使用情况。如果使用率达到80%以上,运行大型程序时会感觉系统不流畅,因为swap分区在内存紧缺的情况下被频繁使用。在磁盘上交换页面进出会极大地影响系统性能。而当我们使用free命令查看Linux系统的内存占用情况时,会发现内存占用一直处于高位,即使此时系统运行的软件不多。这就是Windows和Linux在内存管理上的区别。乍一看,Linux系统吃我们的内存(Linuxatemyram),其实这也是它内存管理的特点。1、free命令下面是使用free命令查看我们实验室文件服务器内存得到的结果。-m选项表示单位是MB:输出的第二行表示系统内存的使用情况:Mem:总计(total)=31405MB,已用(used)=30254MB,空闲(idle)=1150MB,共享(sharedmemory)=12514MB,buffers=1122MB,cached=25424MB注意:前四项比较容易理解,buffer和cache的区别是:buffer是还没有“写入”到磁盘的东西。缓存是从磁盘“读取”并存储以备后用的东西。即buffer用来存放要输出到磁盘的数据,而cache则是从磁盘读取数据存放在内存中以备后用。引入它们是为了提供IO性能。第三行输出表示在第二行-/+buffers/cache的基础上得到了什么:–buffers/cacheused=Memused–buffers–cached=30524MB–1122MB–25424MB=3708MB+buffers/cachefree=Memfree+buffers+cached=1150MB+1122MB+25424MB=27696MB输出的第三行表示swap分区的使用情况:Swap:total(总计)=15775MBused(已用)=596MBfree(闲置)=4095MB二、内存的分类内存是这里分为三类从用户和操作系统的角度来看它的用法有不同的名称:上表中的某物代表free命令中的“buffers/cached”内存,因为从用户和操作系统的角度来看确实使用了这块内存操作系统,但是如果用户要使用它,这块内存可以很快被用户程序回收和使用,所以从用户的角度来看,这块内存应该归类为空闲。再次回到free命令的输出,第三行的输出应该是可以理解的。从用户的角度来看,这一行中的数字代表系统内存的使用情况。因此,如果使用top或free命令查看系统还剩多少内存,实际上应该将freememory加到buffer/cachedmemory中,也就是系统实际的freememory。3.buffers/cached的好处Linux的内存管理做了很多精心的设计。除了缓存dentry(在VFS中用于加速文件路径名到inode的转换)之外,它还采用了两种主要的Cache方式:BufferCache和PageCache,目的是提高磁盘IO的性能。从低速块设备读取的数据会暂时保存在内存中,即使此时不再需要数据,但下次应用程序访问数据时,可以直接从内存中读取,从而绕过低速速度块设备,从而提高系统的整体性能。而Linux会充分利用这些空闲内存。设计思路是,如果内存空闲,不如用它来缓存一些数据,下次程序再次访问数据时,速度会更快,这时候不使用交换分区,而是快速回收一部分缓存,留给用户程序使用。因此,可见buffers/cached真是百利而无一害。真正的缺点可能会让用户产生一种错觉——Linux很耗内存!其实不是这样的,linux是不吃你内存的,只要swap分区没用过就行。4、实验测试:依次读取一个大文件,比较两次读取的时间(1)先生成一个1G的大文件ddif=/dev/zeroof=bigfilebs=1Mcount=1000(2)清除缓存,改成3最后必须改回0,否则后面的测试结果不准确。(3)读取文件,测试耗时24秒。(4)再次读取文件,测试耗时17秒。从上面可以看出第一次读取1G的文件大概需要24秒,第二次再次读取时,只用了17s,下降了一些。
