IT虾米网

Linux上的free命令简介详解

luoye 2018年11月09日 程序员 114 0

每次使用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 >>由于系统在高速的运转,可能存在部分数据不相同

 

 
 
发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Linux的free命令详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。