[[email protected] ~]# free
total used free shared buffers cached
Mem: 3924792 2390256 1534536 0 372432 1623832
-/+ buffers/cache: 393992 3530800
Swap: 7574520 0 7574520
1 free的输出解释
默认内存单位是KB。
第一行时标题,第二行是操作系统对机器物理内存使用情况的认识,第三行是一个进程对机器物理内存使用情况的认识,第四行是交换分区使用情况。
先看第2行
当前机器的物理内存(total)共有:3924792KB;
其中(used)已经使用了2390256KB;
还有1534536KB是(free)空闲的。
显然total=used+free。
shared是为了兼容输出格式而保留的一个遗留项,现在已经没有意义,始终为0,不必追究。
buffers是操作系统为了提高IO性能而把一些要写到硬盘上的数据缓存到内存中,这部分内存的大小就是buffers。
cached与buffers类似,只是缓存的是从硬盘读取的数据。
第3行,是程序可以使用的内存情况,因为操作系统随时可以把buffers中的数据写入硬盘然后释放这部分内存,也可以随时把cahced的内存部分释放,所以这两部分内存只是为了提高性能,不是必须的。从一个一个进程角度来看,可以忽略这两部分的存在,第三行就是从一个进程角度看到的物理内存使用情况,也就是把buffers和cached这两部分当做是空闲可用的来看待。
第4行,是交换分区的使用情况,当物理内存不充足时,才会使用交换分区,无需再解释。
2 手动释放buffers和cached内存
释放buffers前一定记得使用sync把未写入硬盘的数据更新到硬盘,防止数据丢失。
#sync
#echo 3 > /proc/sys/vm/drop_caches
我们看看释放后的效果:
[[email protected] ~]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 3832 299 3533 0 0 23
-/+ buffers/cache: 275 3557
Swap: 7396 0 7396
可以看到,buffers被完全释放了,cached可能还有一部分无法释放。
/proc/sys/vm/drop_caches是个开关,设置其内容就可以控制内核对缓存的处理,具体含义如下:
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
需要说明的是,除非特殊情况,不需要手动清理缓存,应该让操作系统自己判断如何利用缓存。
如果需要更改系统的默认动作,可以设置/etc/sysctl.conf文件。