buff/cache原理以及不被清理的情况

本文解释了Linux系统中的Buffercache和Pagecache缓存机制,重点介绍了它们的工作原理、释放机制,并提到在tmpfs和共享内存使用场景下,缓存可能不会被自动回收,可能导致内存占用问题。
摘要由CSDN通过智能技术生成

buff/cache原理以及不被清理的情况

buff/cache是什么

buffer 和 cache 是两个在计算机技术中被用滥的名词,放在不同语境下会有不同的意义。在 Linux 的内存管理中,这里的buffer 指 Linux 内存的:Buffer cache。这里的 cache 指 Linux 内存中的:Page cache。翻译成中文可以叫做缓冲区缓存和页面缓存。在历史上,它们一个(buffer)被用来当成对 io 设备写的缓存,而另一个(cache)被用来当作对 io 设备的读缓存,这里的 io 设备,主要指的是块设备文件和文件系统上的普通文件。但是现在,它们的意义已经不一样了。在当前的内核中,page cache 顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以 page 进行分配管理的,都可以使用 page cache 作为其缓存来管理使用。当然,不是所有的内存都是以页page进行管理的,也有很多是针对块block进行管理的,这部分内存使用如果要用到 cache 功能,则都集中到 buffer cache 中来使用。(从这个角度出发,是不是 buffer cache 改名叫做 block cache 更好?)然而,也不是所有块block都有固定长度,系统上块的长度主要是根据所使用的块设备决定的,而页长度在 X86 上无论是32位还是64位都是 4k。

其本质是:读取时将最近读取的数据放到物理存储里,这样的话下次读取就直接搜索物理存储会更方便,写入时将部分数据放入物理存储,这样前面数据写入完成后可以直接写入物理存储的数据,更快。

buff/cache的释放机制:

在程序执行时,将部分数据读取到缓存,缓存会占用内存空间,当程序结束后,缓存不会被直接释放,而是在需要内存分配给其他程序时才会被释放。

buff/cache什么情况下不会被回收:
1.tmpfs文件系统下创建文件后
2.程序使用共享内存并没有回收

tmpfs实验结论(这里Centos自带的tmp也是tmpfs文件系统):

1.只要是tmp 下的文件都会占据内存 并且无法回收其占据的内存
2.如果出现cache占据内存较大的情况 则必须给予tmp足够大的存储空间 不然哪怕100M空间创建1G文件去占据内存 也占据的和100M没什么区别
3.如果在Tmp挂载的目录下 创建大于内存的文件 则无法创建
4.重启后tmp目录下的文件会被清除

综上所述:想要缓存占据内存足够大且导致后续程序无法启动
1.必须上个程序在类似tmpfs文件系统下写文件 并且没有删除文件
2.给予tmpfs文件系统足够大的存储

共享内存实验结论:

可能C语言会更可能出发该错误,因为在Python上,如果没有清除共享内存,程序会出现警告提示。

参考文章:https://linux.cn/article-7310-1.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值