linux缓存详解,Linux磁盘缓存机制详解
磁盘缓存出现的原因大概有两个:一是访问磁盘的速度远慢于访问内存的速度,通过在内存中缓存磁盘内容可以提高访问速度;二是根据程序的局部性原理,数据一旦被访问过,就很有可能在短时间内再次被访问,所以在内存中缓存磁盘内容可以提高程序运行速度。简而言之,Linux磁盘缓存机制是为提高系统对磁盘中资源的访问速度。
接下来我们先来详细讲解一下Linux磁盘缓存机制的两大原因:
1.局部性原理
程序局部性原理:程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域,具体来说,局部性通常有两种形式:时间局部性和空间局部性。
时间局部性:被引用过一次的存储器位置在未来会被多次引用。
空间局部性:如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
2.页缓存
Linux系统中为了减少对磁盘的IO操作,会将打开的磁盘内容进行缓存,而缓存的地方则是物理内存,进而将对磁盘的访问转换成对内存的访问,有效提高程序的速度。Linux的缓存方式是利用物理内存缓存磁盘上的内容,称为页缓存(page cache)。
页缓存是由内存中的物理页面组成的,其内容对应磁盘上的物理块。页缓存的大小会根据系统的内存空闲大小进行动态调整,它可以通过占用内存以扩张大小,也可以自我收缩以缓解内存使用压力。
在虚拟内存机制出现以前,操作系统使用块缓存系列,但是在虚拟内存出现以后,操作系统管理IO的粒度更大,因此采用了页缓存机制,页缓存是基于页的、面向文件的缓存机制。
在这次遇到的线上故障中,根本原因在于在业务逻辑中使用了临时文件做缓存,一个临时文件创建后如果在短时间内删除,这时候对这个文件的操作都是在页缓存内进行,不会实际回写到磁盘。当程序出现问题响应变慢时,临时文件存活时间变长,就可能会使其被回写到磁盘上,导致磁盘压力过大,进而影响整个系统。
Linux系统在读取文件时,会优先从页缓存中读取文件内容,如果页缓存不存在,系统会先从磁盘中读取文件内容更新到页缓存中,然后再从页缓存中读取文件内容并返回。大致过程如下:
1)进程调用库函数read发起读取文件请求
2)内核检查已打开的文件列表,调用文件系统提供的read接口
3)找到文件对应的inode,然后计算出要读取的具体的页
4)通过inode查找对应的页缓存,如果页缓存节点命中,则直接返回文件内容;如果没有对应的页缓存,则会产生一个缺页异常(page fault)。这时系统会创建新的空的页缓存并从磁盘中读取文件内容,更新页缓存,然后重复第4步
5)读取文件返回
所以说,所有的文件内容的读取,无论最初有没有命中页缓存,最终都是直接来源于页缓存。
Linux系统磁盘故障的根本原因在于在业务逻辑中使用了临时文件做缓存,一个临时文件创建后如果在短时间内删除,这时候对这个文件的操作都是在页缓存内进行,不会实际回写到磁盘。当程序出现问题响应变慢时,临时文件存活时间变长,就可能会使其被回写到磁盘上,导致磁盘压力过大,进而影响整个系统。我们搞懂了Linux磁盘缓存机制,此类问题也就迎刃而解了。想要学习更多Linux相关的知识,本站的Linux教程无疑是你最佳的选择,短期帮你快速提升Linux系统的知识水平,锻炼你的实战能力。
linux缓存详解,Linux磁盘缓存机制详解相关推荐
- Linux mem 1.3 分页寻址(Paging)机制详解
文章目录 1. X86手册定义 1.1 paging modes 1.2 `4-LEVEL PAGING`和`5-LEVEL PAGING`模式 1.2.1 `4-LEVEL PAGING` 1.2. ...
- linux命令清理磁盘空间,linux环境下清理系统磁盘空间命令详解
提示 1:清理残余的配置文件 一般而言,当我们从 Ubuntu 系统中删除了一个软件之后,该软件的残余配置文件并没有被删除.如果你确信以后不再使用该软件,那么保留其配置文件实在没有必要,所以我们大可一 ...
- mysql刷盘机制详解
目录 刷盘机制总览 log buffer(innodb的,由存储引擎分配) binlog cache(由server分配) buffer pool 自适应刷脏页Adaptive Flushing 刷盘 ...
- 浏览器Disk Cache磁盘缓存及其协商缓存、及原生App和浏览器实现缓存的差异
浏览器Disk Cache磁盘缓存及其协商缓存.及原生App和浏览器实现缓存的差异 目录 浏览器Disk Cache磁盘缓存及其协商缓存.及原生App和浏览器实现缓存的差异 1.Memory Cach ...
- Glide 缓存策略 内存缓存和磁盘缓存
感恩原创:http://www.cnblogs.com/baiqiantao/p/6808457.html Glide 缓存策略 内存缓存和磁盘缓存 官方文档:https://github.com/b ...
- linux 统计_聊聊 Linux 的内存统计
写在前面 本文主要分析 Linux 系统内存统计的一些指标以及进程角度内存使用监控的一些方法. 开始阅读这篇文章前,请先简单阅读下面的几篇文章. <进程眼中的线性地址空间> <线程眼 ...
- linux 编译缓存,Linux磁盘缓存(disk cache)详解
在Linux系统里通过free命令,我们经常可以看到类似下面的输出: $ free -m total used free shared buffers cached Mem: 24097 21665 ...
- 清理linux服务器缓存,详解Linux手动释放缓存的方法
详解Linux手动释放缓存的方法 发布时间:2020-08-20 07:53:27 来源:脚本之家 阅读:87 作者:闪电王国 栏目:服务器 Linux释放内存的命令: sync echo 1 > ...
- 一文了解Linux磁盘缓存机制
前言 最近遇到了一起跟磁盘相关的线上故障,借此总结一下之前不太了解的Linux磁盘缓存相关的知识. 总的来说磁盘缓存出现的原因大概有两个:第一是访问磁盘的速度远慢于访问内存的速度,通过在内存中缓存磁盘 ...
最新文章
- Android p2p service,android – WifiP2pDnsSdServiceInfo.newInstance中的可用服务类型
- linux c 之sigsuspend 进程阻塞
- C++ 中const的用法,特别是用在函数前面与后面的区别!
- 2张表,轻松搞定你的收入问题
- 数值计算 插值与拟合
- Python 爬虫: 抓取花瓣网图片
- 基于JAVA+SpringBoot+Mybatis+MYSQL的社区物业管理系统
- c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)
- 添加常见 URL Scheme 列表,方便快速查询⓶QA:URL Scheme适配好为何仍然报错
- 针对主流浏览器的CSS-HACK写法及IE常用条件注释
- java json web token_一分钟简单了解JSON Web Token
- 原理+代码实战:SUID提权渗透
- 文件已被其他应用程序锁定该怎么解决
- 无线路由器服务器连接线,有线路由器接无线路由器怎么设置
- ad一张图纸绘制多图_ad原理图绘制基础
- 【侯捷 C++ 面向对象高级开发】课程笔记以及个人注释(附带课程资源)
- 触发字检测 trigger word detection
- 孙陶然:切合实际是设定目标的基础
- html标签中的style=visibility:visible
- 电源并联均流电路的几种最常见分析方法
热门文章
- 安卓学习专栏——安卓报错android.support.v4.widget.DrawerLayout飘红
- 苹果电脑如何强制删除mac上面的恶意软件?
- 【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化
- 【读书笔记】刘擎西方现代思想讲义——一场观念的探险
- outlook邮件撤回 outlook邮件如何撤回-来自三人行慕课
- 基于SpringBoot+Mybatis开发的前后端ERP系统Saas平台
- 解读《电信重组公告》:3G发牌仍然无期限
- 运营干货| 用户触达36计,和用户来次亲密接触
- 使用外部时钟,通过TIM21_CH1,对STM32L0XX内部的RC时钟(HSI/MSI等)进行校准
- 面试42场拿下微软、蚂蚁、头条offer的方法论(干货)