Linux buffer/cache

清除方法

echo 1 > /proc/sys/vm/drop_caches # 仅清除页面缓存

echo 2 > /proc/sys/vm/drop_caches # 清除目录项和inode

echo 3 > /proc/sys/vm/drop_caches # 清除页面缓存、目录项以及inode

下面了解一下这几种都是什么,简单理解,目录项和inode,那么只要有读取遍历目录,那么就会去从磁盘读取inode和目录文件系统结构,这块不应很大;另一部分就是PageCache。

简单理解,内存是通过page管理的,

那么disk 数据加载到内存中,就变成了pagecache,(第一种)

写磁盘时也会先写入pagecache,然后由后台同步到磁盘中。(第二种)

除此之外读取目录的时候目录也会缓存进cache(第三种)

下面资料都是借鉴网上公开资料。

页缓存PageCache(Buff/cache)

什么是 buff/cache?

在Linux 2.4的内存管理中,buffer指Linux内存的:Buffer cache。cache指Linux内存中的:Page cache。一般呢,是这么解释两者的。

A buffer is someting that has yet to be ‘written’ to disk.

A cache is someting that has been ‘read’ from the disk and stored for later use.

翻译过来就是说:

buffer(buff) 是用来缓存尚未“写入”磁盘的内容。

cache 是用来缓存从磁盘“读取”出来的东西。

所以 buffer 被用来当成对io设备写的缓存。而 cache 被用来当作对io设备的读缓存。这里的io设备,主要指的是块设备文件和文件系统上的普通文件。

但是在 Linux 2.6 以后,它们的意义不一样了。

在Linux 2.6之后Linux将他们统一合并到了Page cache作为文件层的缓存。而buffer则被用作block层的缓存。

block层的缓存是什么意思呢,你可以认为一个buffer是一个physical disk block在内存的代表,用来将内存中的pages映射为disk blocks,这部分被使用的内存被叫做buffer。

buffer里面的pages,指的是Page cache中的pages,所以,buffer也可以被认为Page cache的一部分。

或者简单来说,buffer负责裸设备相关的缓存,cache负责文件系统的缓存。

Cache 的具体职责

cache主要用来作为文件系统上的文件数据的缓存来用,当进程对文件有read/write操作的时候。包括将文件映射到内存的系统调用mmap,就会用到cache

因为cache被作为文件类型的缓存来用,所以事实上也负责了大部分的块设备文件的缓存工作。

Buffer 的具体职责

在当前的系统实现里,buffer主要是设计用来在系统对块设备进行读写时作为缓存来使用。这意味着对块的操作会使用buffer进行缓存,比如我们在格式化文件系统的时候。

但是一般情况下两个缓存系统是一起配合使用的,比如当我们对一个文件进行写操作的时候,cache的内容会被改变,而buffer则用来将cache的page标记为不同的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写(writeback)时,就不用将整个page写回,而只需要写回修改的部分即可。

Buffer/Cache测试

通过dd 可以对buffer进行测试,用top进程观察free -hdd if=/dev/zero of=testfile bs=1M count=1000free -hecho 1 | sudo tee /proc/sys/vm/drop_cachestime -p cat testfile > /dev/nullfree -htime -p cat testfile > /dev/null

Buffer/Cache查询

开源工具pcstat、hcache、pgcacher均可以查询,其中pgcacher功能稍强,pcstat是鼻祖,都是go语言写的。这几个工具可以查询某个文件是否在cache里;可以查询当前进程打开的文件和进程使用的cache。

对于文件不存在或文件被关闭的,则无法查询,目前也没发现好的方法,只能通过总值减去查询出的值来看

参考:

Linux buffer/cache 内存占用过高的原因以及解决办法_buffcache占用过高是什么导致的 博客-CSDN博客

https://xiaorui.cc/archives/7373

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#关于多线程的线程问题

using System.Text; ​ namespace 平时练习8._19day06 {internal class Program{static async Task Main(string[] args){Console.WriteLine(Thread.CurrentThread.ManagedThreadId );StringBuilder sb new StringBuilder();for (int i 0; i < 10000; i){sb.Append("…

坚持绿色发展的上海智算中心,稳步推进中

自今年年初正式封顶以来&#xff0c;云端股份上海智算中心在外墙及内部的建设进展顺利。这座智算中心地理位置优越&#xff0c;正逐步成为推动数字经济发展的重要力量。 位置优势 云端股份上海智算中心毗邻智慧岛数据产业园&#xff0c;是崇明区目前建设的唯一一座智算中心&am…

多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱

简介&#xff1a; 多功能秒达开源工具箱源码&#xff0c;&#xff0c;可自部署且完全开源的中文工具箱&#xff0c;永远的自由软件&#xff0c;轻量级运行&#xff0c;全平台支持&#xff08;包括ARMv8&#xff09;&#xff0c;完全类似 GPT 的支持&#xff0c;与高效的 UI 高…

前端构建工具 webpack与vite对比

一、webpack构建原理 Webpack的构建过程大致为&#xff1a; 1.从入口文件开始分析依赖&#xff0c; 2.递归解析所有依赖模块&#xff0c;生成依赖图&#xff0c; 3.调用Loader转换文件内容&#xff0c; 4.打包所有模块输出优化后的静态资源 。 webpack工作特点&#xff1a; …

[JS]精选面试题-2

1.谈⼀谈你理解的函数式编程 函数式编程&#xff08;Functional Programming&#xff09;是一种编程范式&#xff0c;通过函数的组合实现程序的功能 核心特性 函数是第一等公民&#xff1a;在函数式编程中&#xff0c;函数不仅可以被调用&#xff0c;还可以像其他值&#xf…

简化登录流程,助力应用建立用户体系

随着智能手机和移动应用的普及&#xff0c;用户需要在不同的应用中注册和登录账号&#xff0c;传统的账号注册和登录流程需要用户输入用户名和密码&#xff0c;这不仅繁琐而且容易造成用户流失。 华为账号服务&#xff08;Account Kit&#xff09;提供简单、快速、安全的登录功…

一文5000字从0到1使用Jmeter实现轻量级的接口自动化测试

接口测试虽然作为版本的一环&#xff0c;但是也是有一套完整的体系&#xff0c;有接口的功能测试、性能测试、安全测试&#xff1b;同时&#xff0c;由于接口的特性&#xff0c;接口的自动化低成本高收益的&#xff0c;使用一些开源工具或一些轻量级的方法&#xff0c;在测试用…

怎么解决小程序的异步请求问题

解决小程序的异步请求问题通常涉及对异步操作的有效管理&#xff0c;以确保数据的正确加载和显示。在小程序中&#xff0c;最常见的异步操作包括网络请求、文件操作等。以下是一些解决小程序异步请求问题的方法&#xff1a; 使用Promise&#xff1a; 小程序中的wx.request接口…

【Kotlin设计模式】Kotlin实现工厂模式

前言 工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;提供一个创建对象的接口&#xff0c;不暴露对象的创建过程。它将实例化对象的任务交给子类或具体实现&#xff0c;从而使得客户端代码与具体类解耦。 工厂模式主要分为以下三类&#xf…

图像处理之:Video Processing Subsystem(一)

免责声明&#xff1a; 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

ucharts图表滚动

背景&#xff1a; 使用ucharts绘制折线图&#xff0c;当数据项多的时候&#xff0c;横坐标显示的文字会重合&#xff0c;故想到滑动 项目代码使用的是原生的代码&#xff0c;而非ucharts的组件&#xff1a; <template><view><canvas canvas-id"chartsLi…

各类软件历史版本的下载地址

postman,notpad等 https://www.filehorse.com/software-developer-tools/https://www.filehorse.com/software-developer-tools/

pdf查看密码

pdf有两种密码方式&#xff0c;一种是打开后进入文件内容页面后需要密码才能进行修改等操作&#xff0c;网上有很多方式进行移除密码操作&#xff0c;第二种是打开就需要密码&#xff0c;我这里简单记录一个暴力破解的方式&#xff0c;仅供参考 import PyPDF2 import itertools…

FreeRTOS学习:内存管理

FreeRTOS内存管理简介 在使用 FreeRTOS 创建任务、队列、信号量等对象的时候&#xff0c; FreeRTOS 一般都提供了两种方法&#xff0c; 动态方法创建&#xff1a;自动地从 FreeRTOS 管理的内存堆中申请所创建对象所需的内存&#xff0c;在对象被删除后&#xff0c;又可以将这…

day33(mysql57主从从+mycat读写分离+java项目结合mycat数据库+lvs_dr轮询调用java项目)

1.设置主从从mysql57服务器 &#xff08;1&#xff09;配置主数据库 [rootmsater_5 ~]# systemctl stop [rootmsater_5 ~]# setenforce 0 [rootmsater_5 ~]# systemctl disable Removed symlink /etc/systemd/system/multi-user.target.wants/# ls anaconda-ks.cfg mysql-5.7…

C语言家教记录(七)

C语言家教记录&#xff08;七&#xff09; 导语字符串字面量变量读写字符串操作函数惯用法数组 结构联合枚举总结与复习 导语 本次授课的内容如下&#xff1a;字符串&#xff0c;结构体、联合体、枚举 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 字…

二刷代码随想录训练营Day 38|322. 零钱兑换、279.完全平方数、139.单词拆分

1.零钱兑换 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包最少的物品件数是多少&#xff1f;| LeetCode&#xff1a;322.零钱兑换_哔哩哔哩_bilibili 代码随想录 代码&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int …

VA水封特点及优势

水封是工业应用中至关重要的组件&#xff0c;起到防止液体泄漏并确保机械设备顺利运行的作用。在众多类型的水封中&#xff0c;VA水封因其独特的特性而广受欢迎。那么&#xff0c;VA水封究竟有哪些特点使其在特定场景中特别有效呢?本文将从设计、材料构成和性能优势等多个角度…

每天一个数据分析题(四百九十七)- 序列模式挖掘

序列模式挖掘 (sequence pattern mining &#xff09;是指挖掘相对时间或其他模式出现频率高的模式&#xff0c;典型的应用还是限于离散型的序列。下列哪个选项不属于序列模式的时限约束&#xff1f; A. 最大跨度约束 B. 主键约束 C. 最小间隔和最大间隔约束 D. 窗口大小约…

Qt实现圆型控件的三种方法之设置样式表

前言 最近在研究绘制各种形状的控件&#xff0c;这里专门挑出圆形的控件进行记录&#xff0c;其它形状的也大差不差&#xff0c;会了圆形的之后其它的也类似。 正文 这里我挑出Label来进行举例。 通过设置样式表 (QSS) 这种方法简单且适用于不需要自定义绘制的场景。就是要…