你以为的swap是你以为的swap吗?空间充足依然占swap,如何解决?
创作时间:
作者:
@小白创作中心
你以为的swap是你以为的swap吗?空间充足依然占swap,如何解决?
引用
CSDN
1.
https://m.blog.csdn.net/vhghhd/article/details/145944512
什么是swap
swap是交换分区。在操作系统中,swap是硬盘上的一部分空间,当系统内存(RAM)不足时,操作系统会将部分内存中的数据移到swap空间,以释放内存供其他程序使用。虽然swap的速度比RAM慢,但它可以防止系统因内存不足而崩溃。
swap分区的使用原理
当物理内存(RAM)不足时,操作系统会将一些暂时不使用的内存页(page)或进程的内存段(segment)移动到swap分区,从而释放物理内存供其他进程使用。这个过程称为换出(swap out)。当这些数据再次被访问时,操作系统会将它们从swap分区重新加载到物理内存中,这个过程称为换入(swap in)。
换出(Swap Out)原理
当系统检测到物理内存不足时,会触发换出操作。以下是换出过程的关键步骤:
- 选择换出的对象
- 页面置换算法(Page Replacement Algorithm):操作系统会根据某种算法选择哪些内存页应该被换出。常见的算法包括:
- 最近最少使用(LRU,Least Recently Used):选择最近最久未被访问的页面换出。
- 先进先出(FIFO,First-In-First-Out):选择最早进入内存的页面换出。
- 最佳适应(Optimal):基于未来访问情况选择最优的页面换出(实际中难以实现,主要用于理论分析)。
- 选择进程的内存段:对于进程的内存段,操作系统会选择那些当前不活跃的进程或进程的非关键部分进行换出。
- 将数据写入swap分区
- 操作系统将选定的内存页或内存段从物理内存中读取出来,并将其写入swap分区的指定位置。
- 每个换出的页面或段都会在swap分区中分配一个空间,并记录其位置信息,以便后续能够快速找到并换入。
- 更新内存管理数据结构
- 操作系统会更新内存管理单元(MMU)中的数据结构,如页表(Page Table)或段表(Segment Table),将换出的页面或段标记为“不在内存”状态。
- 同时,记录这些页面或段在swap分区中的位置,以便后续换入时能够快速定位。
换入(Swap In)原理
当进程尝试访问已经被换出到swap分区的数据时,会触发换入操作。以下是换入过程的关键步骤:
- 触发页面错误(Page Fault)
- 当进程访问一个不在物理内存中的页面时,会产生一个页面错误(Page Fault)。
- 操作系统会捕获这个错误,并检查该页面是否在swap分区中。
- 从swap分区读取数据
- 如果页面在swap分区中,操作系统会找到该页面在swap分区中的位置,并将其读取到物理内存中。
- 如果物理内存中没有足够的空间,操作系统可能会再次触发换出操作,以腾出空间。
- 更新内存管理数据结构
- 操作系统将换入的页面或段标记为“在内存”状态,并更新页表或段表中的相关信息。
- 进程恢复执行,继续访问该页面或段。
swap分区的优缺点
优点
- 扩展内存容量:通过swap分区,系统可以将硬盘空间作为虚拟内存使用,从而扩展可用内存容量。
- 避免内存不足导致的崩溃:当物理内存不足时,swap分区可以提供缓冲,避免系统因内存耗尽而崩溃。
缺点
- 性能下降:由于硬盘的读写速度远低于物理内存,频繁的swap操作会导致系统性能显著下降,尤其是在高负载情况下。
- 增加系统复杂性:swap分区的管理需要额外的机制和开销,增加了系统的复杂性。
空间充足依然占用swap现象
由于 swap 存在的缺陷在于性能的降低,故而在大多数的商用系统之中,都会竭力避免使用 swap ,甚至某些极端的举措是直接将 swap 关闭。不过大多数的选择,都是通过系统的配置,来是操作系统尽量不分配swap,优先使用内存。
我们的系统也采取系统配置的方式尽量不分配swap,设置两条配置,如下:
vm.swappiness = 0
//表示最大限度使用物理内存,然后才是 swap空间- memory policy设置默认 // 系统启动过程中,采用interleave策略分配内存,即在所有可满足需求的节点上交叉分配,防止启动时在某个节点上负载过重
以上述配置后,我们预期是物理内存快用完了时,才会占用swap。但从实际效果来看,内存空间很充足(buffer/cache占用很高)时,就开始占用swap。
问题产生原因
- 回收内存流程:
- 内存可用量小于low水位,kswapd开始介入进行异步内存回收(非阻塞式)
- 内存可用量小于min水位,进入直接同步内存回收(阻塞式)
- 内存可用量高于high水位,kswapd不再工作
buffer/cache中的缓存文件页对应磁盘,当回收文件页内存时,会将缓存页下刷至磁盘
buffer/cache中的缓存匿名页无磁盘可对应,但开启swap后,匿名页对应到swap,
内存空闲多也占用swap原因:
- 每个numa自身有local cpu、local 内存
- 每个numa只看自身local内存是否需要内存回收
- numa需要内存回收时,若开启swap,则buffer/cache中的文件页和匿名页都可对应到磁盘,所以会优先下刷磁盘以获取更多内存。如果还不足,才会去其他numa查询内存
当回收匿名页内存时,会将匿名页下刷至swap。
解决思路
zram简介
- zram是linux的驱动,用于使用内存模拟block设备,通常用来创建内存swap
- zram是使用了内存压缩技术,所以是一种通过时间换空间的技术,即访问zram时,其可以模拟更大的空间,但会消耗一定的cpu资源
- 假设压缩比2:1,则64G虚拟swap,只需要消耗32G实际内存量
方案对比
方案 | 优点 | 缺点 |
---|---|---|
关闭swap | 彻底消除访问swap慢导致的运行效率问题 | 当物理内存确实因不可控因素被占满,会直接触发系统oom杀进程 |
ZRAM技术内存模拟swap | 1. 使用内存模拟swap,可使访问的io速率接近访问内存的速率 内存访问:100ns 1zram访问:3000ns 30ssd访问 :50us 500hdd访问 :1~1000ms 100002. 机制成熟,在Android上已大量使用 3. 不是替代磁盘swap,而是共存,优先使用内存swap,扩充带来性能的提升 | 1. 使用一部分内存做swap,可用内存会随着占用增高而减小 2. 访问swap时会额外占用一部分CPU资源,用以压缩 |
热门推荐
如何安全使用飞机上的WiFi?
孩子感冒咳嗽:病因、症状、诊断与治疗全解析
让孩子学会自己解决矛盾的方法
中超三队亚冠出线形势分析:申花最有望出线,海港形势严峻
逆变器能否带动电磁炉?关键因素分析与使用建议
酒店房间霉味难除?试试这些简单易行的除霉方法!
银行的账户长期不使用会被注销吗?
易学文化考试网:易学如何影响人际关系?易学考试要求是什么?
飞牛OS@Thinkpad小黑X60——打造下载服务器之一(应用中心)
高剂量iTBS结合个体化神经功能靶向治疗技术,为卒中后认知障碍患者带来新希望
跟着网评购物:网络信息如何影响消费行为
如何培养孩子数学思维?六大实用方法助力孩子数学能力提升
梅雨季,阴干的衣服为什么有股怪味?对人体是否有害?
关键之年,“百千万工程”吹响实干号角
20多万中大型燃油SUV怎么选?领克09对比大众途昂
职业技能大赛仲裁职责:确保公平竞争
每日新闻摘抄10一30字
2024智驾年度调查:最高频用车场景与最担心问题是什么?
揭秘网络爬虫:如何高效、合规地收集数据
农村这4种野草莓,第1种如今成贵族水果,最后一种老人常说有毒
LabVIEW FPGA定时功能详解:循环计时器、等待与时钟计数器
华中农大韩文元教授团队揭示细菌"孔明系统"免疫防御机制
去了趟农村小镇,终于明白「肝硬化」为什么这么多
沈周《仿倪瓒笔意册》:文人画精神的传承与演绎
宋理学家朱熹的思想成就与影响
怎么管理自动扣费项目微信
检流计的基本内容
张雪峰说农学出路:农业大学毕业后好就业吗?
循环神经网络RNN和长短期记忆神经网络LSTM详解
《绝区零》,米哈游最特殊的一次尝试