【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.rhkb.cn/news/471873.html

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

相关文章

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用:指程序在执行时,调用方需要等待函数调用返回结果后,才能继续执行下一步操作,是一种阻塞式调用。 异步调用:指程序在执行时,调用方在调用函数后立…

Leecode刷题C语言之统计好节点的数目

执行结果:通过 执行用时和内存消耗如下: 题目:统计好节点的数目 现有一棵 无向 树,树中包含 n 个节点,按从 0 到 n - 1 标记。树的根节点是节点 0 。给你一个长度为 n - 1 的二维整数数组 edges,其中 edges[i] [ai,…

Cellebrite VS IOS18Rebooting

Cellebrite VS IOS18Rebooting我们想分享一些有关 iOS 18 重启“功能”的信息。在过去一周左右的时间里,人们对 iOS 18 中一项新的未记录功能产生了极大关注,该功能会导致设备在一段时间不活动后重新启动。 这意味着,如果设备在一定时间不活…

mysql每日一题(上升的温度,date数据的计算)

日期之间的运算 日期类型的加法运算 data_add(now_data,interval 1 month) select date_add(now(), interval 1 day); -- 加1天 select date_add(now(), interval 1 hour); -- 加1小时 select date_add(now(), interval 1 minute); -- 加1分钟 select date_add(now(), inter…

windows NGIMX配置WebSocket反向代理

linux下 据说nginx是要有 stream的模块 Linux安装Nginx步骤之后续,带stream模块-CSDN博客 Nginx从1.3.13版本就开始支持WebSocket linux 下参考如下链接 配置 Nginx 反向代理 WebSocket - 哈喽哈喽111111 - 博客园 (cnblogs.com) SSL的配置参考 【Linux】采用…

蓝桥杯竞赛单片机组备赛【经验帖】

本人获奖情况说明 笔者本人曾参加过两次蓝桥杯电子赛,在第十二届蓝桥杯大赛单片机设计与开发组获得省级一等奖和国家级二等奖,在第十五届嵌入式设计开发组获得省级二等奖。如果跟着本帖的流程备赛,只要认真勤奋,拿个省二绝对没问…

《鸿蒙生态:开发者的机遇与挑战》

一、引言 在当今科技飞速发展的时代,操作系统作为连接硬件与软件的核心枢纽,其重要性不言而喻。鸿蒙系统的出现,为开发者带来了新的机遇与挑战。本文将从开发者的角度出发,阐述对鸿蒙生态的认知和了解,分析鸿蒙生态的…

入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法:科技守护安全的新篇章

在现代化城市快速发展的背景下,安全防范已成为城市管理与社会生活中不可或缺的一环。随着人工智能、大数据、物联网等技术的飞速发展,智能化安防系统正逐步改变着传统的安全防护模式,特别是在行人入侵检测领域,视频智能分析平台Li…

【Linux】Linux 权限的理解

首先我们先介绍Linux中基本的用户认识: Linux下有两种用户:超级用户(root)和普通用户 超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限(权限较低)的事情。超级用户的…

给阿里云OSS绑定域名并启用SSL

为什么要这么做? 问题描述: 当用户通过 OSS 域名访问文件时,OSS 会在响应头中增加 Content-Disposition: attachment 和 x-oss-force-download: true,导致文件被强制下载而不是预览。这个问题特别影响在 2022/10/09 之后新开通 OS…

spring boot整合https协议

整体目录 1. 生成SSL证书 首先,使用keytool生成一个自签名证书。打开命令行工具并运行以下命令: keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这将创建一个名为keystore.jks的文件&#xf…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

游戏引擎学习第10天

视频参考:https://www.bilibili.com/video/BV1LyU3YpEam/ 介绍intel architecture reference manual 地址:https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html RDTS(读取时间戳计数器)指令是 x86/x86_64 架构中的…

计算机网络(11)和流量控制补充

这一篇对数据链路层中的和流量控制进行详细学习 流量控制(Flow Control)是计算机网络中确保数据流平稳传输的技术,旨在防止数据发送方发送过多数据,导致接收方的缓冲区溢出,进而造成数据丢失或传输失败。流量控制通常…

PVE纵览-安装系统卡“Loading Driver”的快速解决方案

PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字: PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…

Docker在CentOS上的安装与配置

前言 随着云计算和微服务架构的兴起,Docker作为一种轻量级的容器技术,已经成为现代软件开发和运维中的重要工具。本文旨在为初学者提供一份详尽的指南,帮助他们在CentOS系统上安装和配置Docker及相关组件,如Docker Compose和私有…

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5 1. 安装 Oracle Database 23ai2. 连接 Oracle Database 23c3. 重启启动后,手动启动数据库4. 重启启动后,手动启动 Listener5. 手动启动 Pluggable Database6. 自动启动 Pluggable Database7. 设置开…

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求: 通过实验,掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题,使用文档来指导故障排除工作,确定具体的网络问题,实施…

Go开发指南- Goroutine

目录: (1)Go开发指南-Hello World (2)Go开发指南-Gin与Web开发 (3)Go开发指南-Goroutine Goroutine 在java中我们要实现并发编程的时候,通常要自己维护一个线程池,并且需要去包装任务、调度任务和维护上下文切换。这个过程需要消耗大量的精…

解决failed to execute PosixPath(‘dot‘) 或者GraphViz‘s executables not found

在网上找了很多方法都没解决,所以写一篇文章帮助和我遇到同样问题的人 解决方法: 因为python解释器会解释转移字符,因此在环境变量中把\bin换成\\bin即可 解决过程: 系统:win10 已安装pip install graphviz&#xff0…