free 是Linux 查看操作系统整体内存使用情况的最常用的命令。 但是FREE命令中的具体field代表哪些含义,这些field之间的具体关系是什么。恐怕还是有部分同学不太清楚。
默认的单位是Kbyte。
[ansen@localhost ~]$ free
total used free shared buffers cachedMem: 2065488 593352 1472136 1684 25308 278444
-/+ buffers/cache: 289600 1775888
Swap: 1572860 0 1572860
第一行绿色数字: 2065488 : 全部内存容量 2G
593352 : 占用内存容量
1472136 : 剩余内存容量
1684 : 共享内存容量
25308 : buffer 内存使用量
278444 : cache 内存占用量
其中:全部内存容量 2G = 占用内存容量 + 剩余内存容量.
第二行红色数字:
289600 = 占用内存容量(593352) - buffer(25308) - cached(278444), 其实就是用来存储代码,数据,栈,堆(包含操作系统和用户程序)的内存。
1775888 = 剩余内存容量(1472136)+bufer(25308) +cached(278444),buffer 与cache的目的是为了提高IO效率,是具有文件背景的内存page,可以被替换出内存。
第三行蓝色数字:
SWAP 容量, 对于有文件背景的内存(如代码,文本文件等)在内存不足的时候可以替换到文件系统,等真正运行时再从文件系统载入,但是对于数据(例如数据段,栈和堆的数据等)并没有文件背景。SWAP 即LINUX 有意的为数据信息加的文件背景,这样在内存不足的时候内存的数据就可以被swap到文件系统的SWAP区,而等到真正运行时候才在文件系统载入。
下面的例子显示了cached 字段的变化,第一次执行查询时间25s, 第二次查询时间缩短为6s, 因为经过第一次查询文件被缓存,第二次IO 速度提高。同时可以看到cached内存的显著增加。
[ansen@localhost ~]$ free
total used free shared buffers cachedMem: 2065488 593352 1472136 1684 25308 278444
-/+ buffers/cache: 289600 1775888
Swap: 1572860 0 1572860
[ansen@localhost training]$ time find . -name "*.*" -exec grep "sem" {} \;
.............
real 0m25.876s
user 0m1.909s
sys 0m6.124s
[ansen@localhost training]$ free
total used free shared buffers cached
Mem: 2065488 629652 1435836 1860 34224 319164
-/+ buffers/cache: 276264 1789224
Swap: 1572860 0 1572860
[ansen@localhost training]$ time find . -name "*.*" -exec grep "sem" {} \;
.............
real 0m6.663s
user 0m0.660s
sys 0m3.216s