天天看点

Linux查看内存命令free1 free的输出解释2 手动释放buffers和cached内存

[[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文件。