linux磁盘总结

什么是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.hqwc.cn/news/341242.html

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

相关文章

【开源】基于JAVA语言的康复中心管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

C++ λ表达式

λ表达式提供了函数对象的另一种编程机制。 在 C 11 和更高版本中,Lambda 表达式(通常称为 Lambda)是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象(闭包)的简便方法。 Lambda 通常用于封装传递给算法…

docker+django+ubuntu服务器 测试质量管理平台部署

1. 首先需要写一个dockerfile就和流水线配置一样 # 使用基础的 Python 镜像作为基础 FROM python:3.8# 设置工作目录 WORKDIR /mydjpro# 将项目的依赖项添加到容器中 COPY requirements.txt /mydjpro/ RUN pip install urllib3 RUN apt-get update && apt-get install…

银河麒麟v10安装前端环境(Node、vue、Electron+vite)

此帖子所提到的所有依赖包都是基于银河麒麟v10真机的arm架构包,如果是在windows上的虚拟机上 把依赖包换成x64的包即可,方法步骤都是一样 一.node安装 原始方法安装(建议用第二种nvm方法,因为更简单): 1…

如何在 Windows 中使用Copilot AI

Windows Copilot 是 Windows 中的一个新功能,它可以让你与一个智能助理进行对话,获取信息,执行任务,甚至创造内容。Windows Copilot 使用了 Bing Chat 的技术,它是一个基于 OpenAI 的 GPT-4 模型的聊天机器人。 目录 …

OSG加载STL模型

下载了2个简单stl模型,用基本的加载代码;直接可以加载; 查一点资料; 怎样在OSG中添加支持STL格式的模型文件? 使用OSG时,如果需要导入STL格式的模型文件,需要添加STL插件。 可以通过在代码中调…

Vue基础-搭建Vue运行环境

这篇文章介绍了在Vue.js项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Vue及Vue CLI工具、安装webpack模板、安装vue-router、创建Vue项目等步骤。这篇文章为读者提供了清晰的指南,帮助他们快速搭建Vue.js开发环境,为后续的项目开发奠定…

pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys from PySide6 import QtGui from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件,可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI(…

鸿蒙HarmonyOS兼容JS的类Web开发

鸿蒙HarmonyOS兼容JS的类Web开发 文章目录 鸿蒙HarmonyOS兼容JS的类Web开发文件组织目录结构文件访问规则媒体文件格式 js标签配置pageswindow示例 app.js应用生命周期应用对象6 HML语法参考页面结构数据绑定普通事件绑定冒泡事件绑定5捕获事件绑定5列表渲染条件渲染逻辑控制块…

第十二章Session

第十二章Session 1.什么是Session2.Session的创建与获取3.session域中数据的存取4.Session超时的控制5.浏览器和session之间关联的技术内幕 1.什么是Session 注意:前面的Cookie是保存在客户端,而session是在服务端的 2.Session的创建与获取 这里Session…

上门做饭小程序开发方案详解

预约上门做饭小程序,厨师上门做饭小程序有用户端、厨师端、管理后台。php开发语言,前端uniapp,有成品源码。可二开,可定制。 一 用户端 用户有3种下单方式,直接向平台快速预约下单,选择厨师直接向厨师下单…

PINN物理信息网络 | 物理信息神经网络PINN实例及其Python实现

基本介绍 物理信息神经网络是一种基于物理系统的神经网络模型。它的设计灵感来自于神经科学和量子力学,旨在利用物理系统的特性来处理和存储信息。 传统的神经网络使用数字或模拟电子组件作为基本单元进行计算和存储。而物理信息神经网络则使用物理系统中的元件来代…