IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Linux操作系统中内存buffer和cache的区别

PHPor 的Blog 2010-01-08 12:09:00 累计浏览 6,403 次
本机暂存
    Free

    free 命令相对于top 提供了更简洁的查看系统内存使用情况:

      $ free

    total used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000

      Mem:表示物理内存统计

    -/+ buffers/cached:表示物理内存的缓存统计

    Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。

      系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。

      我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。

      total1:表示物理内存总量。

      used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

      free1:未被分配的内存。

      shared1:共享内存,一般系统不会用到,这里也不讨论。

      buffers1:系统分配但未被使用的buffers 数量。

      cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。

      used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。

      free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

      可以整理出如下等式:

    total1 = used1 + free1total1 = used2 + free2used1 = buffers1 + cached1 + used2free2 = buffers1 + cached1 + free1

      buffer 与cache 的区别

    A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.

      更详细的解释参考:Difference Between Buffer and Cache

      对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣, 请参考:What is Shared Memory?

      cache 和 buffer的区别:

    Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直 接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

      Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

      Free中的buffer和cache:(它们都是占用内存):

      buffer : 作为buffer cache的内存,是块设备的读写缓冲区

      cache: 作为page cache的内存, 文件系统的cache

      如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。

同分类推荐文章

  1. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)
  2. WARNING: detected duplicate paths to the same disk导致crs无法正常启动故障解决 (2026-05-24 22:24:49)
  3. Terraform 极简入门:从 AWS-CLI 到基础设施即代码(IaC) (2026-05-20 08:00:00)

查看更多 DevOps 文章 →

建议继续学习

  1. Java开发岗位面试题归类汇总 (累计阅读 21,970)
  2. Linux如何统计进程的CPU利用率 (累计阅读 16,203)
  3. 我的 RHCA 之路 (累计阅读 13,926)
  4. Linux内存点滴 用户进程内存空间 (累计阅读 13,049)
  5. 给程序员新手的一些建议 (累计阅读 13,024)
  6. Linux 性能监控、测试、优化工具 (累计阅读 12,950)
  7. 关于linux内存free的一些事情 (累计阅读 12,749)
  8. ps - 按进程消耗内存多少排序 (累计阅读 12,603)
  9. Google怎么用linux (累计阅读 12,466)
  10. find命令的一点注意事项 (累计阅读 11,785)