linux free 命令下free/available区别

例子

[root@VM_16_17_centos bin]# free 
              total        used        free      shared  buff/cache   available
Mem:        1882892      785272      280428       40496      817192      852060
Swap:             0           0           0

先说明一些基本概念
第一列
Mem 内存的使用信息
Swap 交换空间的使用信息
第一行
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 应用程序 使用的物理内存大小

其中有两个概念需要注意

free 与 available 的区别

free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)

Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。

buff 和 cache 的区别

以下内容来自# buffer和cache怎么让你们解释的那么难理解?

从字面上和语义来看,buffer名为缓冲,cache名为缓存。我们知道各种硬件存在制作工艺上的差别,所以当两种硬件需要交互的时候,肯定会存在速度上的差异,而且只有交互双方都完成才可以各自处理别的其他事务。假如现在有两个需要交互的设备A和B,A设备用来交互的接口速率为1000M/s,B设备用来交互的接口速率为500M/s,那他们彼此访问的时候都会出现以下两种情况:(以A来说)

一.A从B取一个1000M的文件结果需要2s,本来需要1s就可以完成的工作,却还需要额外等待1s,B设备把剩余的500M找出来,这等待B取出剩下500M的空闲时间内(1s)其他的事务还干不了

二.A给B一个1000M的文件结果也需要2s,本来需要也就1s就可以完成的工作,却由于B,1s内只能拿500M,剩下的500M还得等下一个1sB来取,这等待下1s的时间还做不了其他事务。

那有什么方法既可以让A在‘取’或‘给’B的时候既能完成目标任务又不浪费那1s空闲等待时间去处理其他事务呢?我们知道产生这种结果主要是因为B跟不上A的节奏,但即使这样A也得必须等B处理完本次事务才能干其他活(单核cpu来说),除非你有三头六臂。那有小伙伴可能会问了,能不能在A和B之间加一层区域比如说ab,让ab既能跟上A的频率也会照顾B的感受,没错我们确实可以这样设计来磨合接口速率上的差异,你可以这样想象,在区域ab提供了两个交互接口一个是a接口另一个是b接口,a接口的速率接近A,b接口的速率最少等于B,然后我们把ab的a和A相连,ab的b和B相连,ab就像一座桥把A和B链接起来,并告知A和B通过他都能转发给对方,文件可以暂时存储,最终拓扑大概如下:

示例

现在我们再来看上述两种情况:

对于第一种情况A要B:当A从B取一个1000M的文件,他把需求告诉了ab,接下来ab通过b和B进行文件传送,由于B本身的速率,传送第一次ab并没有什么卵用,对A来说不仅浪费了时间还浪费了感情,ab这家伙很快感受到了A的不满,所以在第二次传送的时候,ab背着B偷偷缓存了一个一模一样的文件,而且只要从B取东西,ab都会缓存一个拷贝下来放在自己的大本营,如果下次A或者其他C来取B的东西,ab直接就给A或C一个货真价实的赝品,然后把它通过a接口给了A或C,由于a的速率相对接近A的接口速率,所以A觉得不错为他省了时间,最终和ab的a成了好基友,说白了此时的ab提供的就是一种缓存能力,即cache,绝对的走私!因为C取的是A执行的结果。所以在这种工作模式下,怎么取得的东西是最新的也是我们需要考虑的,一般就是清cache。例如cpu读取内存数据,硬盘一般都提供一个内存作为缓存来增加系统的读取性能

对于第二种情况A给B:当A发给B一个1000M的文件,因为A知道通过ab的a接口就可以转交给B,而且通过a接口要比通过B接口传送文件需要等待的时间更短,所以1000M通过a接口给了ab ,站在A视图上他认为已经把1000M的文件给了B,但对于ab并不立即交给B,而是先缓存下来,除非B执行sync命令,即使B马上要,但由于b的接口速率最少大于B接口速率,所以也不会存在漏洞时间,但最终的结果是A节约了时间就可以干其他的事务,说白了就是推卸责任,哈哈而ab此时提供的就是一种缓冲的能力,即buffer,它存在的目的适用于当速度快的往速度慢的输出东西。例如内存的数据要写到磁盘,cpu寄存器里的数据写到内存。

看了上面这个例子,那我们现在看一下在计算机领域,在处理磁盘IO读写的时候,cpu,memory,disk基于这种模型给出的一个实例。我们先来一幅图:(我从别家当来的,我觉得,看N篇文档 不如瞄此一图)

示例

page cache:文件系统层级的缓存,从磁盘里读取的内容是存储到这里,这样程序读取磁盘内容就会非常快,比如使用grep和find等命令查找内容和文件时,第一次会慢很多,再次执行就快好多倍,几乎是瞬间。但如上所说,如果对文件的更新不关心,就没必要清cache,否则如果要实施同步,必须要把内存空间中的cache clean下

buffer cache:磁盘等块设备的缓冲,内存的这一部分是要写入到磁盘里的。这种情况需要注意,位于内存buffer中的数据不是即时写入磁盘,而是系统空闲或者buffer达到一定大小统一写到磁盘中,所以断电易失,为了防止数据丢失所以我们最好正常关机或者多执行几次sync命令,让位于buffer上的数据立刻写到磁盘里。

 

  • 45
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: `free` 命令用于显示系统当前的内存使用情况。它的输出结果包括系统总内存、已使用内存、可用内存、缓存和交换分区情况等。 下面是一个示意输出: ``` total used free shared buff/cache available Mem: 2034244 1479640 387320 13124 169284 411992 Swap: 2097148 34000 2063148 ``` 其中: - `total` 表示系统总内存大小,单位为 KB。 - `used` 表示已使用的内存大小,单位为 KB。 - `free` 表示可用的内存大小,单位为 KB。 - `shared` 表示被共享使用的内存大小,单位为 KB。 - `buff/cache` 表示被缓存的内存大小,单位为 KB。 - `available` 表示可用的内存大小,单位为 KB。 另外,在输出中还包括交换分区的情况,包括交换分区总大小、已使用大小和可用大小等信息。 ### 回答2: Linuxfree命令用于显示系统内存的使用情况。使用free命令可以查看系统可用内存、已用内存、缓存和交换空间等信息。其示意如下: total used free shared buff/cache available Mem: 1633556 1495764 72640 141928 655152 409728 Swap: 2097148 0 2097148 上方的表格中,各列的含义如下: - total表示系统总内存大小。 - used表示已使用的内存大小,包括被缓存和共享的内存。 - free表示系统空闲的内存大小。该内存可立即分配给应用程序使用。 - shared表示被共享的内存。 - buff/cache表示缓存使用的内存。缓存是为了提高文件系统性能而将磁盘上的数据缓存到内存中。 - available表示可用内存的近似值。它是free+buff/cache,即可立即分配给进程的内存大小。 下方的Swap表示交换分区的使用情况,包括交换分区的总大小、已使用的交换空间和可用的交换空间。 通过free命令可以了解系统的内存使用情况,帮助我们及时调整和优化系统配置,确保系统运行稳定且高效。 ### 回答3: `free`命令是一个Linux系统上的常用命令,用于查看系统内存的使用情况。 `free`命令会显示出系统中的物理内存和交换空间的使用情况。它会显示出如下的信息: - `total`:表示系统总内存的大小。 - `used`:表示已使用的内存大小。 - `free`:表示空闲的内存大小。 - `shared`:表示多个进程共享使用的内存大小。 - `buffers`:表示用于缓冲的内存大小。 - `cached`:表示用于缓存的内存大小。 这些大小的单位通常是以KiB(千字节)为单位。比如,`total`表示总内存的大小为1024000 KiB,即1GB。 除了以上信息,`free`命令还会显示如下额外的信息: - `+/- buffers/cache`:表示已使用的内存大小和不属于缓冲和缓存的内存大小之和。 - `available`:表示系统当前可用的内存大小。这个值是根据当前系统负载和未来预测进行计算的。 `free`命令的输出可以帮助我们了解系统内存的使用情况。通过查看`used`和`free`字段,我们可以判断系统内存是否足够。同时,通过查看`buffers`和`cached`字段,我们可以了解系统是否有足够的缓冲和缓存空间,以提高系统的性能。 总之,`free`命令是一个非常有用的命令,可以帮助我们实时监测和分析系统内存的使用情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值