【Linux】系统中负责回收内存的进程和机制有哪些?

  1. kswapd进程
    • 主要机制
    • kswapd是Linux内核中的一个守护进程,它主要负责回收内存。当系统的空闲内存低于某个阈值(称为“水印”)时,kswapd被唤醒。它使用一种基于LRU(最近最少使用)算法的页面回收机制。
    • 例如,在一个运行多个应用程序的Linux服务器上,如果数据库应用占用了大量内存,使得空闲内存减少,kswapd就会开始工作。它会遍历内存中的页面,将那些最近最少使用的页面标记为可回收。这些页面可能包括缓存的文件数据(页缓存)或者进程的匿名内存(如堆和栈)。
    • 对于页缓存,kswapd可以直接释放这些页面,因为文件数据可以从磁盘重新读取。对于匿名内存,kswapd可能会将页面内容交换到磁盘上的交换空间(swap space),以便为其他进程腾出物理内存。
    • 配置参数影响回收行为
    • 可以通过调整一些内核参数来影响kswapd的行为。例如,vm.swappiness参数用于控制系统将内存数据交换到磁盘交换空间的倾向程度。取值范围是0 - 100,数值越高,表示系统越倾向于使用交换空间来释放内存。
      可以使用命名vmstat -a 查看活跃和非活跃的内存有多少,
  2. OOM Killer(内存不足杀手)机制
    • 触发条件和工作方式
    • 当系统内存极度紧张,kswapd无法及时回收足够的内存来满足新的内存请求时,就可能触发OOM Killer机制。它会根据每个进程的内存使用情况、优先级等因素,选择一个或多个进程“杀死”,以释放内存。
    • 例如,在一个内存资源有限的嵌入式Linux设备上,如果同时运行了多个内存密集型应用,并且内存已经耗尽,OOM Killer会评估各个进程。通常,它会优先选择占用内存较多且优先级较低的进程,如一些后台的非关键任务进程,将其终止,从而回收内存来保障系统的基本功能和更重要的进程能够继续运行。
    • 配置进程的OOM分数来控制优先级
    • 可以通过调整进程的OOM分数(oom_score)来控制进程被OOM Killer选中的概率。OOM分数越高,进程在内存紧张时被选中终止的可能性越大。一些关键的系统进程通常具有较低的OOM分数,以避免被意外终止。
  3. 内存压缩机制(如zRAM)
    • 工作原理
    • 内存压缩是一种相对较新的内存回收辅助机制。以zRAM为例,它是一种基于内存的块设备,通过将内存中的数据进行压缩,从而在不使用交换空间的情况下腾出更多的可用内存。
    • 当系统需要回收内存时,zRAM会尝试压缩内存中的页面。如果页面能够成功压缩到一定程度,就可以在内存中腾出空间,而不需要将页面交换到磁盘。例如,对于一些频繁访问但暂时不使用的数据,zRAM可以将其压缩存储在内存中,当需要再次访问时,再进行解压。这种方式比将数据交换到磁盘速度更快,因为磁盘I/O速度通常比内存读写速度慢很多。
    • 配置和性能影响
    • 可以通过内核参数来配置zRAM的大小和压缩算法等参数。不过,内存压缩也会消耗一定的CPU资源,因为压缩和解压操作需要CPU进行计算。所以在配置zRAM时,需要根据系统的实际情况(如CPU性能、内存大小等)来平衡内存回收效果和CPU消耗之间的关系。
  4. **内核函数try_to_free_page()

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

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

相关文章

边缘提取函数 [OPENCV--2]

OPENCV中最常用的边界检测是CANNY函数 下面展示它的用法 通常输入一个灰度图像(边界一般和颜色无关)这样也可以简化运算cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像,第二个是输出的图像这两个参数都是引用…

【9688】基于springboot+vue的CSGO赛事管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取免费源码 项目描述 在世界范围内,CSGO赛事管理系统已经得到…

基于HTTP编写ping操作

基于HTTP编写ping操作 前言 在上一集我们就完成了创建MockServer的任务,那么我们就可以正式开始进行网络的通讯,那么我们今天就来基于HTTP来做一个客户端ping服务端的请求,服务端返回pong的响应。 需求分析 基于HTTP,实现ping…

数学几百年重大错误:将无穷多各异直线误为直线y=x

黄小宁 h定理:点集AB≌B的必要条件是A≌B。 证:若AB则A必可恒等变换地变为BA≌A,而恒等变换是保距变换。证毕。 直线Z:x-y0(x的变域是x轴)可放大(拉伸)变换为直线L(不≌Z…

力扣 LeetCode 459. 重复的子字符串(Day4:字符串)

解题思路: KMP算法 len - next[len - 1]作为最小公共子串的长度 len % (len - next[len - 1]) 0检测能否构成重复串,能构成整数倍,代表可以构成 注意: i 从 j 的下一位开始,即 i 初始化为 1 next[len - 1]需要大…

【MMIN】缺失模态想象网络用于不确定缺失模态的情绪识别

代码地址:https://github.com/AIM3RUC/MMIN abstract: 在以往的研究中,多模态融合已被证明可以提高情绪识别的性能。然而,在实际应用中,我们经常会遇到模态丢失的问题,而哪些模态会丢失是不确定的。这使得…

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟,由于内部HSI存在较大的误差,因此我们在系统完成上电初始化,之后需要将STM32的时钟切换到外部HSE作为系统时钟,那么我…

离散数学笔记

第 1 章 数理逻辑 1.1 命题 1.1.1 基本概念 非真即假的陈述句称作命题 作为命题的陈述句所表达的判断结果称作命题的真值 真值只取两个值:真(1或T)或假(0或F) 真值为真的命题称作真命题,真值为假的命…

华大严选生物基因科技有限公司:基因检测行业十佳优质品牌

在 DNA 基因检测领域,华大严选生物基因科技有限公司以其卓越的品质和专业的服务脱颖而出,荣获 DNA 基因检测行业十佳优质品牌。 华大严选拥有先进的技术和设备,确保检测结果的准确性和可靠性。其专业的团队由经验丰富的科学家和技术人员组成…

spring boot整合https协议

注意:此方式是跳过SSL认证的。 整体目录 1. 生成SSL证书 首先,使用keytool生成一个自签名证书。打开命令行工具并运行以下命令: keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这…

python3 pyinstaller编译相关 和 python2兼容的一些问题

一: python2 和 python3的兼容问题 如果本地同时安装了python2 和 python3, 且都配置了环境变量的情况下, 在命令行里如何区分呢? python2: py -2 python3: py -3如何区分python2的pip 与 python3 的pip呢 python2: pip install xxx python3: pip3 install xxx二: pyin…

互联网行业面对大数据时代新挑战如何实现数据高速传输

随着互联网技术的飞速发展,我们正处在一个数据量爆炸增长的时代。据IDC预测,到2024年,全球数据总量将飙升至159.2ZB,而到了2028年,这一数字更是将达到384.6ZB。这样的增长速度,无疑为互联网行业带来了巨大的…

Python自动化小技巧24——实现自动化输出模板表格报告

背景 很多人拿到数据excel文件,然后要写报告,做表格,要各种计算,各种排序,分组聚合,数据透视,然后合并单元格,添加边框,加粗,添加显示规则,添加数…

python爬虫获得店铺的所有商品

在编写Python爬虫以获取店铺的所有商品信息时,通常涉及到发送HTTP请求、解析响应内容以及处理API返回的数据。以下是一个详细的Python爬虫示例,用于获取店铺的商品信息。这个示例假设API返回的是JSON格式的数据,并且需要API密钥进行认证。 步…

单片机设计电流与温度监控python上位机监控平台设计

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代工业自动化和智能设备管理中,对电流和温度的实时监控是…

HarmonyOS本地存储-Preferences(用户首选项)的使用

一,用户首选项简述 ohos.data.preferences (用户首选项) 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。 数据存储形式为键值对,键的类型为字符串型,值的存储数据…

【springboot使用sqlite数据库】Java后台同时使用mysql、sqlite

环境:根据业务的需要,老版程序使用的数据库是sqlite,版本升级成前后台分离模式,因此需要兼容mysql与sqlite数据库同时使用。 pom.xml设置: application.yml文件配置: mapper.java文件: service.…

【IC每日一题:AXI4协议时序及Verilog示例】

IC每日一题:AXI4协议时序及Verilog示例 1 AXI4协议1.1 AXI4通道1.1.0 握手机制1.1.1 写操作1.1.2 读操作 1.2 握手相关时序1.2.1 握手防死锁 1.3 AXI传输时序1.3.0 Burst传输1.3.1 AXI_Lite Write 传输1.3.2 Read读传输1.3.3. 非对齐传输1.3.4 Outstanding传输1.3.5…

Linux操作系统 -----(4.用户账户及组账户管理)

目录 前言 本章学习目标 1.用户分类 2.用户账户文件 3.用户影子文件 4.用户账户管理命令 4.1.新增用户命令 4.2.修改密码命令 4.3.修改用户属性命令 4.4.删除用户命令 5.组用户管理 5.1.组账户分类 5.2.组账户管理文件 5.3.组账户管理命令 5.3.1.新建组命令 5.3…