内存满了如何处理?

目录

虚拟内存

内存分配过程

直接内存回收和后台内存回收

回收内存的触发标准

那些内存被回收呢?

内存回收后,内存还是不够怎么办呢?


虚拟内存

介绍操作系统内存如何使用时,不可以避免的先认识到虚拟内存

首先我们通过虚拟内存的作用,来认识一下:

1.虚拟内存可以使得进程对运行内存超过物理内存大小,因为程序运行符合局部性原理,CPU 访问内存会有很明显的重复访问的倾向性,对于那些没有被经常使用到的内存,我们可以把它换出到物理内存之外,比如硬盘上的 swap 区域。

我们为一个进程分配内存时,分配的是一个虚拟内存,如果我们分配的是物理内存那么,当这个进程大部分东西没有被使用时,就造成了内存的浪费,所以当我们真正使用时才分配真实的物理内存

2.由于每个进程都有自己的页表,所以每个进程的虚拟内存空间就是相互独立的。进程也没有办法访问其他进程的页表,所以这些页表是私有的,这就解决了多进程之间地址冲突的问题。

物理地址是虚拟地址通过页表映射而来的,每个进程都有自己的页表,

那么每个进程访问真实的物理地址互不干扰,因为中间隔着虚拟地址

3.页表里的页表项中除了物理地址之外,还有一些标记属性的比特,比如控制一个页的读写权限,标记该页是否存在等。在内存访问方面,操作系统提供了更好的安全性。

避免了用户态直接访问内核态的物理地址

内存分配过程

直接内存回收和后台内存回收

当使用malloc动态的分配内存时,我们知道哪分配的是虚拟内存,而不是真实的物理内存

当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存,

这时会发现这个虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,

进程会从用户态切换到内核态,保存现场(保存PC指针)和上下文,

并将缺页中断交给 内核的缺页中断函数 处理。缺页中断处理函数会看是否有空闲的物理内存,

如果有,就直接分配物理内存,并建立虚拟内存与物理内存之间的映射关系

如果没有空闲的物理内存,那么内核就会开始进行回收内存的工作

回收的方式主要是两种:直接内存回收后台内存回收。         

后台内存回收:

后台内存回收:在物理内存紧张的时候

会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的

直接内存回收:   如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,

这个回收内存的过程是同步的,会阻塞进程的执行。(阻塞申请内存的那个进程)

影响:造成很长时间的延迟,以及系统的 CPU 利用率会升高,最终引起系统负荷飙高。

回收内存的触发标准

下面用图解释

当然你可以调整这个阈值的大小,从而尽早的运行后台内存回收,从而避免内存紧张

那些内存被回收呢?

主要有两类内存可以被回收,而且它们的回收方式也不同。

文件页:内核缓存的磁盘数据和内核缓存的文件数据都叫作文件页。

大部分文件页,都可以直接释放内存,以后有需要时,再从磁盘重新读取就可以了。

而那些被应用程序修改过,并且暂时还没写入磁盘的数据(也就是脏页),

就得先写入磁盘,然后才能进行内存释放。

所以,回收干净页的方式是直接释放内存回收脏页的方式是先写回磁盘后再释放内存


匿名页:这部分内存没有实际载体,不像文件缓存有硬盘文件这样一个载体,比如堆、栈数据等。这部分内存很可能还要再次被访问,所以不能直接释放内存,

它们回收的方式是通过 Linux 的 Swap 机制,Swap 会把不常访问的内存先写到磁盘中,

然后释放这些内存给其他更需要的进程使用。再次访问这些内存时重新从磁盘读入内存就可以了。

文件页内存页 又依靠什么机制来淘汰呢?

MySQL如何改进LRU算法-CSDN博客

哪当然是Linux的LRU,类似我这篇博客里MySQL的LRU算法,

Linux的LRU 分为两个链表 一个活跃链表, 一个非活跃链表

所以当我们 回收时 就从非活跃链表 淘汰页(把这些页从内存中淘汰,下次调用从磁盘拿)

内存回收后,内存还是不够怎么办呢?

触发 OOM (Out of Memory)机制

OOM Killer 机制会根据算法选择一个占用物理内存较高的进程,然后将其杀死,

以便释放内存资源,如果物理内存依然不足

OOM Killer 会继续杀死根据算法选择占用物理内存较高的进程,直到释放足够的内存位置。

算法:

1. 进程使用的物理内存量:

// points 代表打分的结果
// process_pages 代表进程已经使用的物理内存页面数
// oom_score_adj 代表 OOM 校准值
// totalpages 代表系统总的可用页面数
points = process_pages + oom_score_adj*totalpages/1000

2.特权进程的评分:特权进程通常较为重要,因此将其得分设置为1/4。例如守护进程  (1号进程)

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

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

相关文章

python 如何表示大写字母

upper() 方法将字符串中的小写字母转为大写字母。 语法 upper()方法语法: str.upper() 参数 NA。 返回值 返回小写字母转为大写字母的字符串。 实例 以下实例展示了 upper()函数的使用方法: #!/usr/bin/python str "this is string example…

就业班 第三阶段(负载均衡) 2401--4.18 day2 nginx2 LVS-DR模式

3、LVS/DR 模式 实验说明: 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…

轻松搭建llama3Web 交互界面 - Ollama + Open WebUI

Ubuntu下安装:(官网:Download Ollama on Linux) curl -fsSL https://ollama.com/install.sh | sh 就运行起来ollama了,不放心可以用ollama serve查看一下 ollama run llama3 就可以跑起来了, 那么我们肯…

利用regress绘制拟合图,利用Slope的趋势分析(5)

code如下: % SCD,积雪日数 % SCS,积雪初日 % SCM,积雪终日% SCS SCD SCM clc; clear; % 读取 Excel 表 excel_file E:\work\2024年\April20\积雪作图\tif文件\excel表\SCS.xlsx; % Excel 文件路径 data readtable(excel_file);datavalue data{:,2:end}; year (…

基于vue+node+mysql的视频校对系统

一、登录注册:包括登录,注册,忘记密码,验证码等常用点。 二、用户管理:包括用户的增删改查 三、权限管理(请增加这个权限:任务分配——只有管理者才能发布和删除任务;管理员设置。 四…

ARTS Week 24

Algorithm 本周的算法题为 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: img 输入:list1 [1,2,4], list2 [1,3,4]输出:[1,1,2,3,4,4] 实现代码如下&…

Kimi Chat四大更新详细解读!模型能力提升,支持语音输入输出!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

Mysql 在Windows Server系统下修改数据文件存储路径遇到的坑

因项目需要搭建一个Mysql数据库,为了方便日常运维操作开始选择了Windows Server 2012R2(已有的虚拟机),考滤到要300G空间,原来的盘空间不够了,就是给虚拟机加了磁盘,Mysql 8.0.26社区版安装路径没得选择,默认就装在C&a…

B端 :悬浮层、弹窗、吐司、抽屉等形式,你真的懂么?

一、弹出组件简介 B端指的是企业级应用,悬浮层、弹窗、吐司、抽屉是常见的界面元素或交互方式。 1. 悬浮层(Floating Layer):悬浮层是一种浮动在页面上方的窗口,通常用于显示一些重要的信息或提供某些功能。它可以覆…

【学习笔记二十二】EWM执行过账更改

一、EWM过账更改 1.EWM过账更改概述 过账更改是库存量特征字段(例如,非限制库存到质量检验库存)的更改,或者产品或批次编号的更改。 通常,库存的实际位置不一定更改。过账更改的一个示例是将库存从检验释放到非限制库存,反之亦然。可以从ERP 或 EWM 中触发过账更改。 2…

文件摆渡:安全、高效的摆渡系统助力提升效率

很多组织和企业都会通过网络隔离的方式来保护内部的数据,网络隔离可以是物理隔离,也可以是逻辑隔离,如使用防火墙、VPN、DMZ等技术手段来实现,隔离之后还会去寻找文件摆渡方式,来保障日常的业务和经营需求。 进行网络隔…

实验:路由过滤与引入

一、实验拓扑 二、实验要求 1、按照图示配置 IP 地址,R1,R3,R4 上使用 loopback 口模拟业务网段 2、R1和R3运行RIPv2,R2,R3和R4运行OSPF,各自协议内部互通 3、在 RIP 和 oSPF 间配置双向路由引入,要求除 R…