free命令
一 free命令可以做什么
free 命令显示系统内存的使用情况,包括物理内存、
交换内存(swap)和内核缓冲区内存。
[root@db03 /scripts/day03]# free
total used free shared buff/cache available
Mem: 2028088 95848 1803360 9712 128880 1775964
Swap: 1048572 0 1048572
如果加上 -h 选项,输出的结果会友好很多:
[root@db03 /scripts/day03]# free -h
total used free shared buff/cache available
Mem: 1.9G 93M 1.7G 9.5M 125M 1.7G
Swap: 1.0G 0B 1.0G
有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:
[root@db03 /scripts/day03]# free -hs 3
total used free shared buff/cache available
Mem: 1.9G 93M 1.7G 9.5M 125M 1.7G
Swap: 1.0G 0B 1.0G
total used free shared buff/cache available
Mem: 1.9G 93M 1.7G 9.5M 125M 1.7G
Swap: 1.0G 0B 1.0G
上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。
由于 free 命令本身比较简单,所以本文的重点会放在如何通过 free 命令了解系统当前的内存使用状况。
# 释放缓存的命令
sync # 释放之前先把缓冲区(buff)的数据写入磁盘
echo 3 > /proc/sys/vm/drop_caches # 释放内存
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存
# 释放完内存后改回去让系统重新自动分配内存。
echo 0 >/proc/sys/vm/drop_caches
二 输出参数解释
Mem # 行(第二行)是内存的使用情况。
Swap # 行(第三行)是交换空间的使用情况。
total # 列显示系统总的可用物理内存和交换空间大小。
used # 列显示已经被使用的物理内存和交换空间。
free # 列显示还有多少物理内存和交换空间可用使用。
shared # 列显示被共享使用的物理内存大小。
buff/cache # 列显示被 buffer 和 cache 使用的物理内存大小
available # 列显示还可以被应用程序使用的物理内存大小。
Buffer和Cache的区别
缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定 期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的 灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。
free命令总结
free 命令是一个既简单又复杂的命令。简单是因为这个命令的参数少,
输出结果清晰。说它复杂则是因为它背后是比较晦涩的操作系统中的概念,
如果不清楚这些概念,即便看了 free 命令的输出也 get 不到多少有价值的信息。