搜索

电脑内存不足时系统会自动采用哪些机制?

夢幻星辰
发布: 2025-09-19 17:03:01
原创
719人浏览过
当电脑内存不足时,系统通过虚拟内存、内存压缩、缓存清理、进程优先级调整和OOM Killer等机制协同工作,优先释放资源或终止高耗内存进程以避免崩溃。

电脑内存不足时系统会自动采用哪些机制?

电脑的物理内存(RAM)不足时,系统为了避免崩溃并保持运行,会主动启用一系列的应急机制。最核心的策略就是虚拟内存管理,它会把部分不常用的内存数据临时“挪”到硬盘上,以腾出宝贵的物理内存给当前活跃的程序。同时,系统还会更积极地清理缓存、压缩内存,甚至在极端情况下,会毫不犹豫地“牺牲”掉一些占用内存过多的程序。

解决方案

电脑内存不足时,系统自动采取的机制主要围绕着“腾挪”和“牺牲”展开:

  1. 虚拟内存(Virtual Memory)与页面交换(Paging) 这是最基础也是最重要的机制。当物理内存告急时,操作系统会把那些当前不活跃、但又不能直接丢弃的内存数据,以“页”(通常是4KB或更大固定大小的数据块)的形式,暂时写入到硬盘上一个预设的文件或分区,这被称为“交换文件”(Swap File)或“交换分区”(Swap Space)。当这些数据再次被程序需要时,系统会再把它们从硬盘读回物理内存。这个过程虽然能有效避免内存耗尽导致的系统崩溃,但由于硬盘的速度远低于RAM,频繁的页面交换会导致系统性能急剧下降,也就是我们常说的“卡顿”。

  2. 内存压缩(Memory Compression) 相比于直接写入硬盘,内存压缩是一种更优雅的缓解方案。一些现代操作系统(如Windows 8及更高版本、macOS、以及Linux上的zram/zswap等)会在物理内存紧张时,尝试将不活跃的内存页进行压缩,然后继续保留在物理内存中。这样,同样大小的物理内存就能容纳更多的数据。CPU虽然需要额外的时间进行压缩和解压缩,但这个开销通常远小于从硬盘读写数据的延迟。这是一种用CPU时间换取内存空间和I/O性能的策略。

  3. 缓存清理与回收(Cache Cleaning and Reclamation) 操作系统和应用程序会维护各种缓存,比如文件系统缓存、浏览器缓存、程序内部缓存等,这些缓存都占用着物理内存。当内存压力增大时,系统会更积极地清理和回收这些缓存,释放出内存供其他更重要的任务使用。它会优先清除那些最不常用或最容易重新生成的数据。

  4. 进程优先级调整(Process Priority Adjustment) 虽然不直接释放内存,但系统可能会动态调整进程的优先级。对于那些后台运行、不那么紧急的进程,系统可能会降低它们的调度优先级,从而减少它们获取CPU时间的机会,间接降低它们对内存的持续需求或避免它们进一步扩张内存占用。这是一种间接的资源管理手段。

  5. OOM Killer(Out-Of-Memory Killer) 这是一种极端但有效的“自救”机制,在Linux系统中尤为突出。当所有其他策略都无法缓解内存压力,系统即将完全无响应甚至崩溃时,OOM Killer会被触发。它会根据一套复杂的评分机制(

    oom_score
    登录后复制
    ),识别并强制终止那些占用内存最多、或对系统整体稳定性影响相对较小的进程。这就像是系统为了活下去,不得不“壮士断腕”,牺牲掉一些应用程序来释放关键资源。被杀死的程序通常是那些内存泄漏严重或者内存使用量异常的进程。

虚拟内存与物理内存:它们究竟是如何协同工作的?

要理解虚拟内存和物理内存的协同,我们需要从计算机体系结构的角度来看。我们平时说的“内存”通常指物理内存,也就是RAM芯片。而“虚拟内存”则是一个操作系统抽象出来的概念,它为每个运行的程序提供了一个连续、独立的地址空间,这个空间可能比实际的物理内存大得多。

核心在于内存管理单元(MMU)。当CPU试图访问一个内存地址时,它实际上发出的是一个“虚拟地址”。这个虚拟地址并不能直接对应到RAM上的某个位置。MMU的工作就是将这个虚拟地址实时地转换成一个“物理地址”,也就是RAM上的真实位置。

这个转换过程依赖于页表(Page Table)。操作系统会维护一个巨大的页表,记录着每个虚拟内存页(通常是4KB)对应的物理内存页框(Page Frame)在哪里。如果一个虚拟页当前不在物理内存中(因为它被交换到硬盘了),页表中会有一个特殊的标记。当CPU尝试访问这个不在物理内存中的虚拟页时,MMU会触发一个“缺页中断”(Page Fault)。操作系统接到中断后,会暂停当前进程,然后从硬盘的交换文件中找到对应的内存页,将其读入一个空闲的物理内存页框,更新页表,最后再让CPU从头执行刚才导致缺页中断的指令。

为了加速这个转换过程,MMU内部还有一个叫做转换旁路缓冲器(TLB - Translation Lookaside Buffer)的缓存,它存储了最近使用过的虚拟地址到物理地址的映射关系。这样,大多数时候CPU访问内存时,都可以直接从TLB中快速查找到物理地址,而无需每次都去查询慢速的页表。

所以,虚拟内存和物理内存的协同,本质上就是MMU和操作系统通过页表和交换机制,共同管理着一个比物理内存更大的、对应用程序透明的地址空间。应用程序觉得自己拥有无限的、连续的内存,而实际的物理内存则被操作系统高效地分配和管理着。

Kubit.ai
Kubit.ai

一个AI驱动的产品分析平台,为产品和数据团队构建

Kubit.ai47
查看详情 Kubit.ai

当内存耗尽时,系统是如何选择要“牺牲”哪些程序的?

当内存压力达到临界点,系统不得不通过终止进程来释放资源时,这个选择过程并非随意,而是基于一套复杂的启发式算法。在Linux系统中,这主要是由OOM Killer(Out-Of-Memory Killer)负责。

OOM Killer会给每个运行中的进程计算一个

oom_score
登录后复制
(OOM分数)。这个分数越高,进程被杀死的可能性就越大。计算
oom_score
登录后复制
的因素有很多,主要包括:

  • 进程当前占用的物理内存量: 这是一个最直接的指标,占用内存越多的进程,分数越高。
  • 进程的运行时间: 运行时间长的进程,可能被认为是更核心或更稳定的,分数可能相对低一些,但也可能因为长时间运行累积了大量内存而分数变高。
  • 进程的优先级(nice值): 用户或系统管理员设定的优先级会影响分数。高优先级的进程通常分数较低,不易被杀。
  • 进程是否为root用户拥有: 通常,root用户启动的系统关键进程分数会较低,以避免系统核心服务被误杀。
  • 进程是否是其他进程的父进程: 杀死父进程可能会导致其所有子进程也终止,因此系统可能会倾向于杀死叶子进程。
  • 进程是否被标记为不可杀死(
    oom_score_adj
    登录后复制
    ):
    用户可以通过修改
    /proc/<pid>/oom_score_adj
    登录后复制
    来调整进程的OOM分数偏移量,从而影响其被杀死的概率。负值表示更不容易被杀,正值表示更容易被杀。例如,一些关键的数据库服务可能会被配置为负值,以确保它们在内存紧张时能存活。

OOM Killer的目标是快速释放足够的内存,以避免系统完全冻结。它会选择一个

oom_score
登录后复制
最高的进程进行终止。如果一次终止不足以解决问题,它可能会继续终止下一个分数最高的进程,直到系统内存压力得到缓解。这是一个残酷但必要的机制,它确保了在极端情况下,系统至少能够保持部分功能,而不是完全崩溃。在Windows和macOS中,虽然没有明确的“OOM Killer”概念,但它们也有类似的内存管理策略,会优先暂停或终止那些非关键、占用内存大的进程。

除了增加内存,我们还能做些什么来缓解电脑的内存压力?

增加物理内存当然是最直接有效的办法,但很多时候我们受限于硬件条件或预算。其实,在不增加硬件投入的前提下,我们也能通过一些软件层面的优化来显著缓解内存压力:

  1. 管理启动项与后台应用 很多软件在安装时会默认设置为开机自启动,或者在关闭后仍然以后台进程的形式运行。这些程序会默默地占用内存。

    • 操作建议: 定期检查“任务管理器”(Windows)或“活动监视器”(macOS),禁用不必要的开机启动项。对于不常用的软件,确保它们在退出后彻底关闭,而不是最小化到系统托盘。
  2. 优化浏览器使用 现代浏览器是内存消耗大户,尤其是打开大量标签页时。

    • 操作建议: 利用浏览器自带的“标签页休眠”功能(如Chrome的内存节省模式),或安装第三方扩展来自动暂停不活跃的标签页。定期关闭不用的标签页。考虑使用内存占用相对较少的浏览器(如Edge的效率模式)。
  3. 调整虚拟内存(页面文件)设置 虽然虚拟内存会拖慢系统,但合理设置它的大小至关重要。如果页面文件太小,系统在内存不足时可能无法有效地进行页面交换,反而更容易崩溃。

    • 操作建议: 确保页面文件设置在系统盘(通常是C盘)上,并且大小设置为系统推荐值或略高于物理内存大小。如果你的电脑有SSD,将页面文件设置在SSD上可以显著提高交换性能,尽管这会加速SSD的磨损。
  4. 使用轻量级软件替代 很多常用软件都有功能类似但资源占用更小的“轻量版”或替代品。

    • 操作建议: 例如,用图片查看器替代功能强大的图片编辑软件,用简单的文本编辑器替代功能复杂的IDE,或者寻找一些开源、社区维护的轻量级工具
  5. 定期清理系统垃圾与卸载不常用软件 虽然这主要影响磁盘空间,但过多的临时文件、缓存和不必要的软件会间接影响系统性能。不用的软件卸载后可以释放其占用的内存资源。

    • 操作建议: 使用系统自带的磁盘清理工具,或第三方清理软件,定期清理临时文件、浏览器缓存等。卸载那些你已经很久没用过的软件。
  6. 更新驱动和操作系统 内存泄漏是导致内存不足的一个常见原因,它通常是软件或驱动的bug。

    • 操作建议: 确保你的操作系统和所有硬件驱动都是最新版本。开发者会不断发布更新来修复这些内存泄漏问题,从而提高系统的稳定性和内存使用效率。

通过这些细致入微的管理和优化,即使不增加硬件,我们也能让电脑在有限的内存下运行得更流畅,更稳定。

以上就是电脑内存不足时系统会自动采用哪些机制?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号