简介

free命令,可以查看系统空闲和使用的内存,如物理内存,swap分区和内存缓存区。

缓存机制

为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。

参数

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

案例

1、centos7
image.png
第一列,mem代表物理内存;buffers/cache代表缓冲区的内存;swap代表交换分区的内存。
total:代表总计内存
used:代表已用大小
free:代表空闲大小
shared:多个进程共享的内存总额
buff/cache:缓存内存大小

空闲内存=free(1828)+buff/cache(1343)
已用内存=total(7821)-空闲内存
available包含free和/buff/cache剩余部分

2、centos6
image.png
buffers:缓冲区的大小,是设备读写的缓冲区,buffer的内容即将被写入磁盘,是基于提高内存和磁盘的交换速度
cached:缓存大小,是文件系统的cache,cache内容是从磁盘读出来的,是基于提高cpu和内存的交换速度。
- buffers/cached:程序角度上看已经使用的内存数,这才是程序实实在在吃掉的内存数。
+ buffers/cached:程序角度上看未使用、可用的内存数。

buffers和cached有什么区别呢?

cachecpu和内存之间的,buffer内存和磁盘之间的,都是为了解决速度不对等的问题。
缓存(cache)是把读取过来的数据保存起来,重新读取时若命中,就不去硬盘了,若没有命中就去读硬盘,其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读取的内容不断往后排,直至从中删除。
缓冲(buffer)时根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的的反复寻道,从而提高系统性能,linux有一个守护进程定期清空缓冲内容(即写入磁盘)。
也可以通过sync命令手动清空缓冲。举个例子:我这里有个ext2的的u盘,我往里面cp一个3M的mp3,但u盘的灯没有跳动,过了一会(或者手动输入sync),U盘的灯就跳动起来了。卸载设备时会清空缓存,所以有时候卸载一个设备要等上几秒中。
修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。–两者都是RAM中的数据。
buffer是即将要写入磁盘的,而cache是被从磁盘中读出来的
buffer由各种进程分配,被用在如输入队列等方面。一个简单的例子是某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。
cache经常被用在磁盘的I/O请求上,如果有多个进程要访问某个文件,于是该文件被做成cache以便下次被访问,这样可以提高系统性能。
Buffer Cachebuffer cache,又称bcache,其中文名称为缓冲器高速缓冲存储器,简称缓冲器高缓。另外,buffer cache按照其工作原理,又被称为块高缓