free命令介绍下面是使用free命令查看我们实验室文件服务器内存得到的结果。-m选项表示单位为MB:第二行输出表示系统内存的使用情况:Mem:total(总量)=3920MB,used(已用)=1938MB,free(闲置)=1982MB,shared(共享memory)=0MB,buffers=497MB,cached=1235MB注:前四项比较好理解,buffer和cache找不到合适的区别是:buffer是还没有“写入”到磁盘的东西.缓存是从磁盘“读取”并存储以备后用的东西。即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分区。上面输出的结果比较难理解。可能是第三行。为什么要把这行数据显示给用户呢?内存使用减去系统缓冲区/缓存内存是什么意思?系统空闲内存加上缓冲区/缓存内存是什么意思?内存的分类我们把内存分为三类。从用户和操作系统的角度来看,其用法有不同的名称:上表中的某物代表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不会耗尽你的内存。只要你还没有使用交换分区,你的内存快用完了,你应该感到庆幸,因为Linux缓存了很多数据,也许下次你会从中受益!实验证明通过实验验证以上结论:我们依次读取一个大文件,对比两次读取的做法:1.先生成一个1G的大文件2.清除缓存3.读取这个文件并测试消耗时间4.再次读取文件。从上面可以看出测试消耗的时间。1G的文件第一次读取需要18s左右,第二次读取再次读取只需要0.3s,这是一个全面的提升。60次!
