linux磁盘总结

news2025/2/26 12:25:23

什么是page_cache

linux读写磁盘,如果都是采用directIO的话,效率太低,所以我们在读写磁盘上加了一层缓存,page_cache。读的话,如果page_cache有的话,就不用向磁盘发出请求。写的话,也直接写入的page_cache就行了,异步刷回磁盘(操作系统不crash,不会丢失)。

如果查看page_cache的大小:cat /proc/meminfo

而SwapCached是在打开了Swap分区后,把Inactive(anon)+Active(anon)这两项里的匿名页给交换到磁盘(swap out),然后再读入到内存(swap in)后分配的内存。由于读入到内存后原来的Swap File还在,所以SwapCached也可以认为是File-backed page,即属于Page Cache

page_cache如何产生

 第一种比第二种更加高效,毕竟少了用户态和内核态的复制。

cat /proc/vmstat | egrep "dirty|writeback" 可以查看这个过程

page_cache如何回收呢

 

回收内存时发生抖动是因为触达了慢速度路径

也可能是NUMA配置不佳。但相比内存回收的危害而言,NUMA带来的性能提升几乎可以忽略,所以配置为0,利远大于弊。

page_cache操作不对,对业务有影响

进程会通过inode来找到文件的地址空间(address_space),然后结合文件偏移(会转换成page index)来找具体的Page。理解为inode是Pagecache Page(页缓存的页)的宿主(host),如果inode不存在了,那么PageCache Page也就不存在了。

可以这样查看。

当我们执行echo 2来drop slab的时候它也会把Page Cache给drop掉,很多运维人员都会忽视掉这一点。并且操作系统回收slab(innode)的memory时也同样可能发生这种情况。

解决办法

1.

2.是通过memory_cgroup来将他管理起来

memory cgroup提供了几个内存水位控制线memory.{min, low, high, max} 。

  • memory.max- 这是指memory cgroup内的进程最多能够分配的内存,如果不设置的话,就默认不做内存大小的限制。

  • memory.high- 如果设置了这一项,当memory cgroup内进程的内存使用量超过了该值后就会立即被回收掉,所以这一项的目的是为了尽快的回收掉不活跃的Page Cache。

  • memory.low- 这一项是用来保护重要数据的,当memory cgroup内进程的内存使用量低于了该值后,在内存紧张触发回收后就会先去回收不属于该memory cgroup的Page Cache,等到其他的Page Cache都被回收掉后再来回收这些Page Cache。

  • memory.min- 这一项同样是用来保护重要数据的,只不过与memoy.low有所不同的是,当memory cgroup内进程的内存使用量低于该值后,即使其他不在该memory cgroup内的Page Cache都被回收完了也不会去回收这些Page Cache,可以理解为这是用来保护最高优先级的数据的。

那么,如果你想要保护你的Page Cache不被回收,你就可以考虑将你的业务进程放在一个memory cgroup中,然后设置memory.{min,low} 来进行保护;与之相反,如果你想要尽快释放你的Page Cache,那你可以考虑设置memory.high来及时的释放掉不活跃的Page Cache。

定位方法论

当然这套分析方法论不仅仅适用于Page Cache引发的问题,对于系统其他层面引起的问题同样也适用。让我们再次回顾一下这些要点:

  • 在观察Page Cache的行为时,你可以先从最简单易用的分析工具比如sar入手,来得到一个概况,然后再使用更加专业一些的工具比如tracepoint去做更细致的分析。这样你就能分析清楚Page Cache的详细行为,以及它为什么会产生问题;
  • 对于很多的偶发性的问题,往往需要采集很多的信息才能抓取出来问题现场,这种场景下最好使用perf script来写一些自动化分析的工具来提升效率;
  • 如果你担心分析工具会对生产环境产生性能影响,你可以把信息采集下来之后进行离线分析,或者使用ebpf来进行自动过滤分析,请注意ebpf需要高版本内核的支持。

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

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

相关文章

Python与VSCode环境:手把手教你安装与配置【第22篇—python安装与配置】

文章目录 1. 安装Python2. 配置Python虚拟环境3. 安装Vscode4. 安装Python插件5. 配置Vscode与虚拟环境6. 创建Python项目7. 运行和调试8. 使用扩展功能 9. 安装Jupyter支持10. 版本管理与集成11. 自定义配置结语 随着Python的普及,选择一款高效的集成开发环境&…

Clickhouse表引擎之CollapsingMergeTree引擎的原理与使用

前言 继续上次关于clickhouse的一些踩坑点,今天讲讲另外一个表引擎——CollapsingMergeTree。这个对于引擎对于数据量较大的场景是个不错的选择。注意,选择clickhouse的一般原因都是为了高效率查询,提高用户体验感,说白了就是以空…

网络-DHCP中继(思科)

思科 前提:将R1 R3配置16板卡 将R1更改标识符为三层交换机 将R3更改标识符为交换机 拓扑图: R2进行配置 配置IP地址 为12.0.0.2 配置默认路由到R1的f1/4接口 配置dhcp地址池 配置vlan10的地址池 配置vlan20的地址池 三层交换机R1进行配置 将f1/4接口…

瑞_Java开发手册_(四)安全规约

🙊前言:本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研…

springboot学生信息管理系统

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅一 、设计说明 1.1研究背景 随着…

【Windows】基于Hyper-V安装Ubuntu虚拟机

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍基于Hyper-V安装Ubuntu虚拟机。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新…

22款奔驰C260L升级ACC自适应巡航 解放双脚 出行更加安全

有的时候你是否厌倦了不停的刹车、加油?是不是讨厌急刹车,为掌握不好车距而烦恼? 如果是这样,那么就升级奔驰原厂ACC自适应式巡航控制系统,带排队自动辅助和行车距离警报功能,感受现代科技带给你的舒适安全…

监测服务器硬件设备运行状况的软件 - wgcloud

WGCLOUD是一款开源免费的运维平台,具有轻量,高效,性能稳定,部署简单,上手容易等特点 WGCLOUD可以监测服务器的cpu,内存,磁盘,负载,磁盘,缓存,网络…

【rust/bevy】从game template开始

目录 说在前面步骤进入3D控制方块问题 说在前面 操作系统:win11rust版本:rustc 1.77.0-nightlybevy版本:0.12 步骤 rust安装 这里 windows下建议使用msvc版本bevy安装 这里clone代码git clone https://github.com/NiklasEi/bevy_game_templa…

Docker运行RabbitMQ并使用SpringAMQP操作

文章目录 一、RabbitMQ运行二、整合SpringAMQP1. 引入依赖 三、测试1. 消费者2. 生产者3. 运行 一、RabbitMQ运行 拉取docker镜像 docker pull rabbitmq:3-management基础运行命令 docker run \-e RABBITMQ_DEFAULT_USERrabbitmq \-e RABBITMQ_DEFAULT_PASSrabbitmq \--name…

高效办公:如何通过在文件名称右边添加关键字提升工作效率

在繁忙的办公环境中,经常要处理大量的文件和资料。那如何管理和查找这些文件呢,常见的方法有在文件名称右边添加关键字。下面来看云炫文件管理器如何通过在文件名称右边添加关键字来提升工作效率。 在文件名称右边添加关键字前后效果图。 文件名批量添加…

Blazor 的基本原理探索

背景 为了提升开发效率,关键是对js不够熟悉,所以要使用C#进行全栈的开发,使用了mudblazor和radzen blazor,以及可能会用到其他的blazor组件,所有很有必要对blazor有个比较全面的不求甚解,其基本原理以及bl…

AI-数学-高中-5.求函数解析式(4种方法)

原作者视频:函数】3函数解析式求法(易)_哔哩哔哩_bilibili 1.已知函数类型-待定系数法:先用待定系数法把一次或二次函数一般表达式写出来;再用“要变一起变”左右两边同时替换,计算出一般表达式的常数&…

(分享) 音乐软件Spotify-声破天8.9.4

​【应用名称】:Spotify-声破天 ​【适用平台】:#Android ​【软件标签】:#Spotify ​【应用版本】:8.8.96 → 8.9.4 ​【应用大小】:67MB ​【软件说明】:软件升级更新。iOS可配合qx小火箭类的工具对…

P1179 [NOIP2010 普及组] 数字统计————C++

目录 [NOIP2010 普及组] 数字统计题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code1Code2运行结果 [NOIP2010 普及组] 数字统计 题目描述 请统计某个给定范围 [ L , R ] [L, R] [L,R] 的所有整数中,数字…

ivrobot乐高EV3 鲸鱼 能力风暴自制遥控手柄库文件和编程样例 使用指南

编程示例: 资源下载链接: https://download.csdn.net/download/abilix_tony/88739582 EV3 mindstorms能用基础版和高阶版(条形编程界面) EV3 classroom只能用基础版 (scratch模块形状编程界面) 请根据使…

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(二)

引言:上一篇文章我们简单介绍了AD9129的基础知识,包括芯片的重要特性,外部接口相关的信号特性等。本篇我们重点介绍下项目中FPGA与AD9129互联的原理图设计,包括LVDS IO接口设计、时钟电路以、供电设计以及PCB设计。 LVDS数据接口设…

设计一个简单的规则引擎

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

史诗级长文--朴素贝叶斯

引言 朴素贝叶斯算法是有监督的学习算法,解决的是分类问题,如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但由于该算法以自变量之间的独立&am…

VC++中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示

VC中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示 最近闲着跟着油管博主murtazahassan,学习了一下LEARN OPENCV C in 4 HOURS | Including 3x Projects | Computer Vision,对应的Github源代码地址为:Learn-OpenCV-cpp-in-4-Hour…