每次使用free时都比较迷惑,对于上面的内容一直都不是很清楚,今天仔细查了以下,和大家一起分享以下:
先看一下free的运行结果:
free打印出的内存信息主要分为两种,一种是安装的内存,一种是用磁盘虚拟的内存,就是这里的Swap,相信装过Linux系统的同学肯定不陌生交换分区,这里Swap大小就是我们分区的时候分配的大小。
下面来分别解释以下每个列的意思:
total:去掉为硬件和操作系统保留的内存后剩余的内存总量。许多人奇怪自己的电脑安装了一共8G的内存,但是显示总共只有七点几G的,现在应该没什么疑惑了把,不管Linux还是Windows都会有部分内存是保留给硬件和操作系统的!
userd:当前已使用的内存总量。
free:空闲的或可以使用的内存总量
shared:共享内存大小,主要用于进程间通信
buff(buffers):主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。
cache:主要用于文件内容缓冲
available:可以使用的内存总量
buffers与cached的区别:
对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说 可用内存=系统free memory+buffers+cached.
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages,cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等,而cached直接用来记忆我们打开的文件的。
关于为什么需要缓冲,这里简单解释以下:我们知道,在CPU,内存,外存的运行速度之间,存在这样的关系:
CPU比内存快100倍,内存比磁盘快十万倍,且他们之间的差距还在增大!
因此为了协调他们速度之间的不匹配,缓存就由此而生,在CPU内部的缓存,为了协调CPU和内存之间速度的不匹配,而内存的产生也是为了协调磁盘和CPU速度的不匹配。有个这样的一个形象的描述:把CPU的一个时钟周期看作一秒。那么,从L1 cache(CPU的一级缓存)读取信息就好像是拿起桌上的一张草稿纸(3秒);从L2 cache(CPU的二级缓存)读取信息则是从身边的书架上取出一本书(14秒);而从主存中读取信息则相当于走到办公楼下去买个零食(4分钟),而等待硬盘寻道的时间相当于离开办公大楼并开始长达一年零三个月的环球旅行,而这仅仅是寻道时间!
free的详细使用方法
语 法: free [-hbkmotV][-s <间隔秒数>]
补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
参 数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-h 以比较人性化的方式显示内存使用情况。
-o 不显示缓冲区调节列。
-s <间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
free的实现方式
关于free的实现,其实是调用linux下的/proc/meminfo文件
可以对比一下:
zhoupan@Lenovo-G485:~$ free
total used free shared buff/cache available
Mem: 3636688 2286620 240768 79560 1109300 1210716
Swap: 1998844 0 1998844
zhoupan@Lenovo-G485:~$ cat /proc/meminfo
MemTotal: 3636688 kB
MemFree: 239996 kB
MemAvailable: 1209972 kB
Buffers: 96424 kB
Cached: 912480 kB
SwapCached: 0 kB
Active: 2535176 kB
Inactive: 646160 kB
Active(anon): 2174012 kB
Inactive(anon): 77972 kB
Active(file): 361164 kB
Inactive(file): 568188 kB
Unevictable: 448 kB
Mlocked: 448 kB
SwapTotal: 1998844 kB
SwapFree: 1998844 kB
Dirty: 60 kB
Writeback: 0 kB
AnonPages: 2172872 kB
Mapped: 397968 kB
Shmem: 79560 kB
Slab: 100424 kB
SReclaimable: 68764 kB
SUnreclaim: 31660 kB
KernelStack: 8896 kB
PageTables: 42788 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3817188 kB
Committed_AS: 6151536 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 1112064 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 175872 kB
DirectMap2M: 3602432 kB
DirectMap1G: 0 kB
>>由于系统在高速的运转,可能存在部分数据不相同