Linux Free命令各数字含义及Buffer和Cache的区别

本文深入解析Linux中Free命令各数字含义,并详细对比了Buffer与Cache的区别,帮助理解内存使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux Free命令各数字含义及Buffer和Cache的区别

Free 命令的各数字含义

命令演示

[root@vm1 ~]# free
             total       used       free     shared    buffers     cached
Mem:        502276     119160     383116          0      11040      46588
-/+ buffers/cache:      61532     440744
Swap:       835576          0     835576

加上参数m,显示的单位为MB

[root@vm1 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           490        116        374          0         10         45
-/+ buffers/cache:         60        430
Swap:          815          0        815

按行详解

  • total :物理内存的实际总量
  • used :总计分配给缓存(buffer+cache)的使用的数量,但是其中部分可能并未实际使用(注意:这里不是实际使用了的内存)
  • free :未被分配的内存(真正的空闲,未被任何程序占用)
  • shared:多个进程共享的内存总额
  • buffers:磁盘缓存(buffer cache)的大小(可提高I/O调用的性能),系统分配的,但是未被使用的buffer剩余量。
  • cached:磁盘缓存(page cache)的大小(可提高I/O调用的性能),系统分配的,但是未被使用的cache剩余量。
  • -buffers/cache:表示已被我们程序使用的内存数,计算方法:used-buffers-cached(注意:这里才是内存的实际使用量)
  • +buffers/cache:表示还可被我们使用的内存数,计算方法:free+buffers+cached
  • swap:交换分区总量,使用量,剩余量

内存相关参数计算-数字取自上述结果

操作系统总的内存数量:total=used+free=116+374=490MB
操作系统目前内存实际使用量:used-buffers-cached=116-10-45=61MB
操作系统目前可用内存总量=free+buffers+cached=374+10+45=429MB

cache和buffer的区别

1.cache:高速缓存,是位于CPU与主内存之间的一种容量较小但是速度较高的存储器,由于CPU的速度远高于主内存,CPU直接从内存中存取数据需要等待一定的时间周期。cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。
cache又分为一级cache(L1 cache)和二级cache(L2 cache),L1集成在CPU内部,L2早期一般时焊在主板上的,现在也都即成在CPU内部,常见L2 cache的容量有256KB或512KB。
2.buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少。速度快的设备可以利用buffer不间断的进行写操作,速度慢的设备可以直接从buffer中读取数据,减少速度快的设备的等待时间,提高效率。

那么,Free中的cache和buffer用途就显而易见啦!
cache:文件系统的缓冲(page cache)
buuffer:块设备的读写缓冲区(buffer cache)

转载于:https://www.cnblogs.com/cherishry/p/5372173.html

<think>嗯,用户这次问的是Linux内存管理中buffercache区别,这是个经典问题。从引用内容看,用户已经查阅了一些资料,但可能对概念仍有混淆。需要把专业术语转化成容易理解的语言。 用户上次询问的是Linux单用户模式,这次突然转向内存管理,可能是工作中遇到性能问题。考虑到ta能引用技术文档,应该是有一定Linux基础的系统管理员或开发人员。 核心要讲清楚三点:一是数据流向(磁盘←→内存←→应用),二是读写场景差异,三是实际性能影响。引用[3]的解释最准确:Buffer是磁盘块的缓存,Cache是文件内容的缓存。这个区分很关键。 特别要注意引用[5]提到的细节:Buffer其实也用于读磁盘,Cache也用于写文件。这点容易让人困惑,需要举例说明。比如用dd命令直接写磁盘块会经过Buffer,而用vim修改文件则通过Cache。 用户可能真正想知道的是:服务器内存被大量占用时,该优先清理Buffer还是Cache?这需要补充说明内核自动回收机制,但当前问题没问就不展开。 数学公式方面,只需用$...$标注简单符号,比如内存大小$S_{buffer}$。复杂公式反而不利于理解这个主题。最后要生成相关问题帮用户深化学习,比如如何手动释放Cache。</think>在 Linux 内存管理中,**Buffer** **Cache** 都是内存的临时存储区域,用于提升 I/O 性能,但核心区别在于**数据来源用途**: --- ### 一、核心区别总结 | **特性** | **Buffer (缓冲区)** | **Cache (缓存)** | |----------------|----------------------------------------|--------------------------------------| | **数据来源** | **原始磁盘块**(直接操作磁盘扇区) | **文件内容**(通过文件系统读取/写入) | | **主要用途** | 协调磁盘与内存的**读写速度差异** | 减少对**慢速存储设备(如磁盘)的重复访问** | | **典型场景** | - 合并多次小写入为单次大写入<br>- 预读磁盘数据 | - 缓存频繁访问的文件内容<br>- 加速文件读写 | | **数据粒度** | 磁盘块(通常 4KB) | 文件页(通常 4KB) | | **回收优先级** | 内核优先释放 | 内核尽量保留(因重复利用率高) | --- ### 二、技术细节详解 #### 1. **Buffer:磁盘块的临时中转站** - **作用原理**: 当应用**直接读写磁盘块**(如 `dd` 命令操作裸设备)时,数据会暂存于 Buffer。 例如:将 100 个 1KB 的小写操作合并为 1 次 100KB 的大写操作,减少磁盘寻道时间[^3]。 - **数学表示**: 设磁盘写入延迟为 $t_d$,内存操作延迟为 $t_m$($t_d \gg t_m$),通过 Buffer 合并 $n$ 次写操作,总耗时从 $n \cdot t_d$ 降至 $t_d + n \cdot t_m$。 #### 2. **Cache:文件内容的加速层** - **作用原理**: 当应用通过**文件系统**读写文件时(如 `cat file.txt`),文件内容被缓存到 Cache。 例如:首次读取文件需访问磁盘,后续读取直接从 Cache 获取,速度提升 100 倍以上[^3]。 - **数据复用**: 若文件被多次访问,Cache 命中率 $H$ 越高,平均访问时间 $T_{avg}$ 越低: $$T_{avg} = H \cdot t_m + (1-H) \cdot (t_m + t_d)$$ --- ### 三、实际场景对比 | **操作** | **涉及组件** | **原因** | |------------------------|--------------|--------------------------------------------------------------------------| | `dd if=/dev/sda1 of=file` | **Buffer** | 直接读写磁盘块,需缓冲数据以匹配磁盘物理特性 | | `vim file.txt` | **Cache** | 通过文件系统修改文件,内容先写入 Cache(延迟写回磁盘) | | `cp largefile /tmp` | **Cache** | 复制文件时,源文件内容被缓存到 Cache,加速后续读取 | | 数据库裸盘操作 | **Buffer** | 绕过文件系统直接操作磁盘,依赖 Buffer 优化 I/O | --- ### 四、性能监控命令 ```bash # 查看 Buffer/Cache 占用 $ free -h total used free shared buff/cache available Mem: 16G 5.1G 1.2G 320M 9.7G 10G # 详细内存统计 $ cat /proc/meminfo Buffers: 1024 kB # Buffer 大小 Cached: 8192 kB # Cache 大小 ``` --- ### 五、关键注意事项 1. **内存回收策略**: - 当应用需要内存时,内核**优先释放 Buffer**(因其数据可直写回磁盘) - **Cache 释放较谨慎**(可能影响正在运行的程序性能)[^5]。 2. **读写混合场景**: Buffer Cache 可能协同工作,例如写文件时: `应用 → Page CacheCache) → Buffer → 磁盘`[^3][^5]。 3. **性能瓶颈诊断**: - Buffer 使用率高 → 磁盘写压力大(检查磁盘 I/O) - Cache 命中率低 → 文件重复访问率低(优化访问模式或增加内存)[^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值