free命令可以用来查看系统内存使用情况。我一般习惯-m参数以MB的方式查看

free -m

其他参数
  • -b  以Byte为单位显示内存使用情况。 
  • -k  以KB为单位显示内存使用情况。 
  • -m  以MB为单位显示内存使用情况。
  • -g   以GB为单位显示内存使用情况。 
  • -o  不显示缓冲区调节列。 
  • -s<间隔秒数>  持续观察内存使用状况。 
  • -t  显示内存总和列。 
  • -V  显示版本信息。

解释:

  •    total:是总的物理内存
  •    used:使用中的内存
  •    free:完全空闲的内存
  •    shared:多个进程共享的内存 
  •    buffers:写缓存,在写入磁盘之前,先把数据缓存一段时间,可以释放
  •    cache:读缓存,读取过的文件,会缓存一段时间。可以释放
  •    -buffers/cache:应用程序实际使用中的内存大小,等于used-buffers-cached(Mem列的三个数)
  •    +buffers/cache:可供使用的内存总量,等于free+buffers+cached(Mem列的三个数)
  •    Swap:不解释,都能看懂的

所以,可以供程序使用的内存,应该看+buffers/cache(),而不是free。

那明明已经开始使用 swap了,怎么能说内存还充足呢?

照我的理解是,系统在分配内存的时候,如果发现内存不足,会释放一批旧的cache,把空间腾出来给新申请的进程用, 有时候释放不充分或者不及时,于是开始使用到swap了!

手动释放缓存

使用sync命令可以把buffer强制写入硬盘,有时候怕配置没有生效,会使用它强制写到硬盘。如果系统突然断电,buffer的数据没保存,是会丢失的!其实,大多数情况下,占用内存的都是cache,而不是buffer!

下面来说说怎么使用sysctl强制释放缓存,和内存释放相关的内核参数是vm.drop_caches,vm.drop_caches可以设置为0、1、2、3。

说明

   0 采取措施之前的默认值

   1 释放pagecache

   2 释放dentries 和 inodes

   3 释放pagecache、dentries和inodes

实际操作可以使用如下的sysctl,也可以使用echo 3 > /proc/sys/vm/drop_caches,效果一样!

 

[root@localhost ~]# sysctl vm.drop_caches=3

不过这个还是会慢慢涨起来的!