0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Buffer和Cache介绍

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-08-18 09:50 次阅读

通过free命令看Linux内存

4ce0acec-1e31-11ed-ba43-dac502259ad0.png

total:总内存大小。

used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。

free:空闲的内存大小。

shared:进程间共享内存(一般不会用,可以忽略)。

buffers:内存中写完的东西缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上。

cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回)。

-/+ buffers/cache看做两部分

-buffers/cache:正在使用的内存大小(注意不是used部分,因为buffers和cached并不是正在使用的,组织和人民需要是它们是可以释放的),其值=used-buffers-cached。

``+buffers/cache`:可用的内存大小(同理也不是free表示的部分),其值=free+buffers+cached。

Swap:硬盘上交换分区的使用大小。

设计的目的就是当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。

Buffer和Cache介绍

4cf33740-1e31-11ed-ba43-dac502259ad0.png

Cache(缓存),为了调高CPU和内存之间数据交换而设计,Buffer(缓冲)为了提高内存和硬盘(或其他I/O设备的数据交换而设计)。

Cache主要是针对读操作设计的,不过Cache概念可能容易混淆,我理解为CPU本身就有Cache,包括一级缓存、二级缓存、三级缓存,我们知道CPU所有的指令操作对接的都是内存,而CPU的处理能力远高于内存速度,所以为了不让CPU资源闲置,Intel公司在CPU内部集成了一些Cache,但毕竟不能放太多电路在里面,所以这部分Cache并不是很大,主要是用来存放一些常用的指令和常用数据,真正大部分Cache的数据应该是占用内存的空间来缓存请求过的数据,即上面的Cached部分(这部分纯属个人理解,正确与否有待考证)。

Buffer主要是针对写操作设计的,更细的说是针对内存和硬盘之间的写操作来设计的,目的是将写的操作集中起来进行,减少磁盘碎片和硬盘反复寻址过程,提高性能。

在Linux系统内部有一个守护进程会定期清空Buffer中的内容,将其写入硬盘内,当手动执行sync命令时也会触发上述操作。

常见症状

症状一:在Linux中频繁存取文件,物理内存很快用光,而cached一直在增长。

解释:Linux会对每次请求过的数据缓存在cache里,好处就是CPU的处理速度远远高于内存,所以在CPU和内存通讯的时候可以快速从cache中命中结果返回。

症状二:Swap被占用。

解释:内存可能不够了,才会占Swap,所以Swap可以作为服务器监控的一项指标,引起注意。

手动清理Swap和buffers/cache

清理Swap

swapoff-a&&swapon-a

操作说明:如果已经使用了Swap,且当前清空下+buffers/cache还有空间,在执行 swapoff -a操作时,会触发把Swap中的内容交换到内存中,数据不会丢失。

清理buffers/cache:

sync;sync;sync;&&echo3>/proc/sys/vm/drop_caches

sleep2

echo0>/proc/sys/vm/drop_caches

操作说明:

sync-->将缓存的内从写回到硬盘中;

echo 3 >/proc/sys/vm/drop_caches-->修改drop_caches的值为3,默认为0,改为3系统会清理缓存的内容;

sleep 2 --> 等一下,防止上一步没执行完;

echo 0 >/proc/sys/vm/drop_caches --> 改回默认值

总结

通过上面的分析可以知道,当空闲物理内存不多时,不一定表示系统运行状态很差,因为内存的cache及buffer部分可以随时被重用,在某种意义上,这两部分内存也可以看作是额外的空闲内存。

swap如果被频繁调用,bi,bo长时间不为0,则才是内存资源是否紧张的依据。通过free看资源时,实际主要关注-/+ buffers/cache的值就可以知道内存到底够不够了。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 缓存
    +关注

    关注

    1

    文章

    220

    浏览量

    26444
  • Cache
    +关注

    关注

    0

    文章

    127

    浏览量

    27991
  • buffer
    +关注

    关注

    2

    文章

    120

    浏览量

    29776

原文标题:谁再说搞不懂 Linux 的内存、Swap、Cache、Buffer,就把这个给他扔过去!

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Cache和Write Buffer一般性介绍

    Cache是位于CPU与主存储器即DRAM(Dynamic RAM,动态存储器)之间的少量超高速静态存储器SRAM(Static RAM)
    的头像 发表于 10-31 15:07 390次阅读
    <b class='flag-5'>Cache</b>和Write <b class='flag-5'>Buffer</b>一般性<b class='flag-5'>介绍</b>

    CACHE_ENABLED 怎么启用呢

        /* Per DMA Rule 7, our output buffer cache lines must be cleaned */     Memory_cacheInv(outBuf, outBufSize); #endif
    发表于 05-31 01:13

    6678中CACHE的空间使用问题

    参与运算操作时会发生cache存储空间的使用冲突么? 2、memset(void *buffer, int value, int count),对buffer起作用的是它cache中的
    发表于 06-21 13:28

    Cache机制的原理是什么?

    的高速度。CPU与外设交换数据时经常用到buffer(缓冲),这与缓存极其相似,只不过Cache是为了提高CPU和内存之间的数据交换速度而设计,而buffer是为了提高内存和硬盘(或其他I/O设备)之间的数据交换速度而设计的。
    发表于 10-12 06:01

    详谈嵌入式编程需注意的Cache机制和原理

    尽可能发挥CPU的高速度。CPU与外设交换数据时经常用到buffer(缓冲),这与缓存极其相似,只不过Cache是为了提高CPU和内存之间的数据交换速度而设计,而buffer是为了提高内存和硬盘(或其他I/O设备)之间的数据交换
    发表于 11-01 16:16 0次下载
    详谈嵌入式编程需注意的<b class='flag-5'>Cache</b>机制和原理

    BufferCache之间区别是什么?

    cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存之间增加了cache,它的速度比内存快,但是造价
    的头像 发表于 04-02 10:35 6477次阅读

    寄存器和cache的区别介绍

    本文开始阐述了CACHE的概念、CACHE替换机构与读写操作,其次介绍了寄存器的原理以及它的主要技术,最后阐述了寄存器和cache两者之间的区别。
    发表于 04-11 14:10 1.2w次阅读

    Ring buffer介绍

    Buffer 比链表要快,因为它是数组,而且有一个容易预测的访问模式。这很不错,对 CPU 高速缓存友好 (CPU-cache-friendly)-数据可以在硬件层面预加载到高速缓存,因此 CPU
    发表于 04-02 14:32 2944次阅读

    Linux 内核的文件 Cache 管理机制介绍

    文件 Cache 管理是 Linux 内核中一个很重要并且较难理解的组成部分。本文详细介绍了 Linux 内核中文件 Cache 管理的各个方面,希望能够对开发者理解相关代码有所帮助
    发表于 04-02 14:38 358次阅读

    Linux内核Page CacheBuffer Cache两类缓存的作用及关系如何

    page)即为页缓存(page cache)。块缓存(buffer cache),则是内核为了加速对底层存储介质的访问速度,而构建的一层缓存。
    的头像 发表于 07-02 14:25 2345次阅读
    Linux内核Page <b class='flag-5'>Cache</b>和<b class='flag-5'>Buffer</b> <b class='flag-5'>Cache</b>两类缓存的作用及关系如何

    BufferCache的定义

    但是让我问你,由于 Buffer 只是将写入磁盘的数据的缓存。反过来,它还会缓存从磁盘读取的数据吗?或者 Cache 是从文件中读取数据的缓存,那么它是否也为写入文件缓存数据呢?
    的头像 发表于 05-13 09:53 1461次阅读

    Buffercache的区别

    Bbuffer 与 Cache 非常类似,因为它们都用于存储数据数据,被应用层读取字节数据。
    的头像 发表于 07-01 10:44 2818次阅读

    什么是 Cache? Cache读写原理

    由于写入数据和读取指令分别通过 D-Cache 和 I-Cache,所以需要同步 D-Cache 和 I-Cache,即复制后需要先将 D-Cach
    发表于 12-06 09:55 1269次阅读

    Cache验证参考模型对比来谈复杂度权衡

    总体而言,在验证L1 cache system (L1SYS)的过程中,L1SYS的机构被拆分为多个模块,包括shadow command buffer, store buffer, sram
    的头像 发表于 04-28 09:25 761次阅读
    从<b class='flag-5'>Cache</b>验证参考模型对比来谈复杂度权衡

    buffercache的区别

    buffercache的区别 缓冲区(Buffer)和缓存(Cache)是计算机系统中用于提高数据读写效率的两个关键概念,它们虽然功能有所重叠,但在实际应用中存在一些差异。在下文中,
    的头像 发表于 12-07 11:00 425次阅读