你可以在Linux中,敲入free命令获得当前系统的内存使用情况。 #busybox free total used free shared buffers Mem: 55636 52808 2828 0 3132 Swap: 0 0 0 Total: 55636 52808 2828 当我满心欢喜的敲入上面的命令时,收到的却是一阵阵的冷汗,2828k,我的系统只剩下了2M多的内存,系统还能跑吗,是不是命令有错误!!! 让我们来看看在PC机上的Linux系统中,结果是什么样子的。 #free total used free shared buffers cached Mem: 4091524 4021016 70508 0 7656 1824312 -/+ buffers/cache: 2189048 1902476 Swap: 4088532 2891732 1196800 这里我先解释一下几个关键的概念。 buffers:主要是用来给Linux系统中块设备做缓冲区。 cached:用来缓冲我们所打开的文件。 在系统中内存是很宝贵的资源,Linux的思想是,如果内存充足,不用白不用,它会使用内存来cache一些文件,从而加快进程的运行速度;当内存不足时,这些内存又会被回收,供程序使用。 所以真正可用的内存=free+buffers+cached=70508+7656+1824312=1902476。 这样,我们就很清楚了,的确是busybox在实现free时有缺陷,它缺少了关键的一列cache,因此我们无法获得确切的空闲内存值。 既然free命令行不通,那么我们的重点放在了free的数据是从哪里来的! 答案是:/proc /proc目录是一个特殊的文件系统,它不占用磁盘空间,该目录下的内容是根据用户请求的信息,由Linux内核实时生成的。所以我们可以通过proc目录,来访问Linux内核中的一部分数据。 我们可以从proc目录下的meminfo文件,获得当前系统的内存使用情况。 # cat /proc/meminfo MemTotal: 55880 kB MemFree: 2252 kB Buffers: 3760 kB Cached: 26112 kB SwapCached: 0 kB Active: 34652 kB Inactive: 8716 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 55880 kB LowFree: 2252 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB Mapped: 34220 kB Slab: 4504 kB CommitLimit: 27940 kB Committed_AS: 109704 kB PageTables: 1876 kB VmallocTotal: 196608 kB VmallocUsed: 2360 kB VmallocChunk: 4112384 kB 从上面的结果,我们可以知道系统当前总共拥有55880k物理内存, 其中 free 2252kB Buffers 3760 kB Cached 26112 kB 那么当前可用的物理内存=2252+3760+26112=32124kB,应该说还是不少的。 终于我们经过千辛万苦得到了现在系统可用内存,也就可以很容易的计算出 使用的物理内存=55880-32124=23756kB |