你以为的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资源,用以压缩 |
热门推荐
全球第七位可能被治愈的艾滋病患者出现,随访6年未复发
古人“骂人不吐脏字”的智慧:暗中讽刺诗句赏析
STM32F4开发板使用指南:通过ST-Link和USB转TTL下载代码及调试
易经智慧与三才之道
用户研究:如何做用户行为分析?
泡椒凤爪的家常做法分享
内存持续上升,我该如何排查问题?
维生素D,你真的补对了吗?——全球顶级专家最新共识
中国农科院:西藏高原玉米亩产突破1450公斤 创历史新高
梦见八仙的神秘寓意与深层启示
“浙里风光・万驾同游”2025千车万人游浙江首发仪式盛大启幕
iPhone储存空间不足?7个清理技巧,快速释放手机储存空间!
扁平足用鞋垫可以矫正吗
电脑视频无法播放怎么办?手把手教你解决
《玩具总动员》:跨越30年的动画史诗,用玩具诠释人性与成长
CNC油雾如何高效治理
深入解析,脱气中空纤维膜是什么?
解密代数学发展史:从古文明到现代科技,背后的智慧超乎想象
如何通过资产类别测试用例优化投资组合?
2024年生态学专业全国大学排名:含最好的10所本科名校
RS485总线布线,挂接多个设备,传输距离
深入了解美国加州公司年审时间的全面指南
高质量陪伴,玩中也能变聪明!4种智力训练游戏推荐
团队协作岗位要求标准有哪些
东北特色美食有哪些?这8种全是“心头爱”,来了就得吃个遍
如何选择项目管理工具:从功能、易用性到集成性,全面分析
春天推荐吃这4种野菜 如何正确食用?
哺乳期和戒奶期可以喝茶吗?专家解读茶叶对母婴的影响
北上广深等八大城市,功能定位PK
儒家思想的本质是什么?