Linux上的free命令简介

ref:https://www.cnblogs.com/williamjie/p/9233867.html

每次使用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以及 trackingin-flight pages,cached是用来给文件做缓冲。那就是说:buffers是用来存储,目录里面有什么内容,权限等等,而cached直接用来记忆我们打开的文件的。关于为什么需要缓冲,这里简单解释以下:我们知道,在CPU,内存,外存的运行速度之间,存在这样的关系:CPU比内存快100倍,内存比磁盘快十万倍,且他们之间的差距还在增大!因此为了协调他们速度之间的不匹配,缓存就由此而生,在CPU内部的缓存,为了协调CPU和内存之间速度的不匹配,而内存的产生也是为了协调磁盘和CPU速度的不匹配。有个这样的一个形象的描述:把CPU的一个时钟周期看作一秒。那么,从L1cache(CPU的一级缓存)读取信息就好像是拿起桌上的一张草稿纸(3秒);从L2cache(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 kBWriteback: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

>>由于系统在高速的运转,可能存在部分数据不相同