一、准备知识
Linux和Windows系统在内存管理机制方面有很大的不同。在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于Windows的内存管理。主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。
在Linux系统中,还有一个交换分区的概念。交换分区的作用是将系统内核暂时不用的内存块信息换入交换分区,从而释放物理内存。而当又需要使用这部分数据时,有可将该部分信息从交换分区换入物理内存。
(1)、系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。
(2)、页面交换式依据某种“LRU”算法。
二、内存监控命令--free
free命令用于显示系统中使用的和空闲的内存数量。看一下man page中对free命令的描述:“free命令用于显示系统中物理内存的使用和空闲情况及交换分区的使用和空闲情况。”
#语法 free [-b | -k | -m | -g | -h] [-o] [-s delay ] [-c count ] [-a] [-t] [-l] [-V] #选项 -b:显示内存的单位为字节 -k:显示内存的单位为 KB -m:显示内存的单位为 M -o:忽略-/+ buffers/cache行 -t:总和信息 -s<时间>:每隔指定时间执行一次命令,单位为s -h:以可读形式显示容量,需要free -V显示版本大于3.3 -V:版本信息
三、free命令输出分析
# free -m total used free shared buffers cached Mem: 7871 1851 6020 0 110 1419 -/+ buffers/cache: 320 7551 Swap: 8191 0 8191
free命令列含义:
total:物理内存的总大小
used:已经使用的物理内存大小
free:空闲的物理内存大小
shared:多个进程共享的内存大小
buffers/cached:磁盘缓存的大小
free命令行含义:
第二行Mem:代表物理内存使用情况
第三行(-/+ buffers/cached):代表磁盘缓存使用状态
第四行:Swap表示交换空间内存使用状态
free命令输出的内存状态,可以通过两个角度来查看:一个是从内核的角度来看,一个是从应用层的角度来看的。
(1)、从内核角度来看系统内存的使用状态:
是指内核目前可以直接分配到,不需要额外的操作,即free命令输出中第二行Mem项的值,从上面的输出可以看出:系统总计内存7871MB,已经使用了1851MB,剩余6020MB。即:7871-1851=6020
(2)、从应用层的角度来看系统内存的使用状态
是指在系统上运行的应用程序可以使用的内存大小,即free命令输出中第三行 -/+ buffers/cached的输出,可以看到,系统已使用的内存才320MB,而空闲的内存达到7551MB。即:6020+110+1419=7549MB,对于应用程序来说,buffers/cached占有的内存是可用的,因为buffers/cached是为了提高文件读取的性能,当应用程序需要用到内存的时候,buffers/cached会很快地被回收,以供应用程序使用。
四、Buffer和Cache的异同
buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取,这就是操作系统的缓存机制,通过缓存,大大提高了操作系统的性能。但buffers与cached缓冲的内容却是不同的。
buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。