页缓存、回收与内存压力

这页讲的是:Linux 为什么喜欢把空闲内存拿来做缓存,以及内存不够时为什么系统会开始回收、写回、交换,甚至出现明显卡顿。学这页的重点,是把“空闲内存”观念换成“可用内存和可回收内存”的观念。

这块是什么

页缓存、回收与内存压力,讲的是系统如何把内存拿来缓存文件数据、如何在内存紧张时决定“哪些东西还能留下、哪些东西该腾掉”,以及为什么这种全局资源整理会强烈影响性能体验。很多“机器怎么突然卡了”的现象,根子都在这里。

可以先把它理解成:内核会尽量把内存用起来,但它也得随时准备在需要时把这些占用重新收回来。

它负责什么

缓存文件数据

  • 把近期访问的文件内容留在内存里
  • 提升后续读写速度
  • 减少重复打磁盘
  • 让“多出来的内存”也能变成性能收益

回收可腾挪资源

  • 在内存紧张时寻找可回收页面
  • 回收缓存或不活跃内容
  • 在必要时推动写回或交换
  • 让系统尽量不因为短时压力就崩掉

处理内存压力

  • 持续平衡性能与可用性
  • 避免所有页都长期被“占死”
  • 在极端情况下触发更强烈应对
  • 把全局内存危机控制在可管理范围内

为什么“空闲内存很多”不一定是好事

看起来像实际上意味着什么为什么要换个角度看
大量空闲内存说明系统可能还没把这些资源用来换性能。Linux 更倾向于把可用内存拿去做缓存,而不是让它闲着。
缓存占用很多内存并不一定是“内存被浪费”,可能是系统在积极加速文件访问。关键不是“用了多少”,而是“需要时能否回收”。
内存回收变频繁说明系统正在努力腾地方。频繁回收会带来延迟、抖动和卡顿感。
开始写回或交换说明系统已经进入更紧张的资源平衡阶段。这通常意味着体验会明显变差,不只是数字变化。

关键概念

概念现在怎么理解
页缓存把文件数据暂时留在内存里,以换取更快的后续访问。
回收系统在内存紧张时,把某些可放弃或可重建的页面腾出来。
写回先改了缓存,之后再把修改真正落到存储介质上的过程。
交换把不常用页面挪到交换空间,以暂时缓解物理内存压力。
内存压力系统为了继续满足分配需求,不得不明显加大回收和腾挪力度的状态。

为什么重要

常见误解

它不负责什么

和其他模块的关系

相关模块关系
内存管理这页是内存管理里最影响体感的一部分:缓存、腾挪、回收、压力处理。
文件系统 / 块层页缓存、写回和块 I/O 路径天然纠缠在一起。
调度器频繁回收和写回会显著影响任务运行体验和系统延迟。
观测与调试很多“莫名卡顿”只有把回收和写回路径观测出来,才看得清楚。

你现在最该先建立的压力画面

局面系统在尝试什么为什么体感会变差
内存还够,但缓存很多系统优先把空闲内存变成页缓存,先用来换性能。这时数字上看似“空闲少”,但不一定真危险。
新分配不断到来系统开始寻找能腾走的缓存页或不活跃页。回收一旦变频繁,延迟和抖动就会开始冒头。
脏页很多、回收困难系统不得不推动写回,先把脏数据慢慢送回存储。这时卡顿常不是 CPU 忙,而是回收和 I/O 互相牵连。
压力继续恶化交换、强回收甚至 OOM 等更激烈手段开始进入视野。真正难受的往往不是“瞬间没内存”,而是长时间挣扎在压力路径里。

读完这页后,你应该能回答

后面适合继续问:写回为什么会拖慢交互?系统是怎么决定哪些页面更容易被回收的?为什么有时没到 OOM 也会已经非常难用?