结论:颠簸指进程的工作集大于可用物理内存,导致页面在内存与交换区之间被频繁换入换出,CPU 大部分时间耗在页面调度而非真正计算上,系统吞吐急剧下降。表现为磁盘 I/O 繁忙、CPU 利用率反而很低。
展开:产生机制:每个进程需要的工作集(近期频繁访问的页面集合)若装不进分给它的物理页框,刚换出的页马上又被访问,缺页率飙升;多进程并发时各进程互相挤占页面,形成恶性循环——缺页越多 CPU 越闲,调度器反而引入更多进程"提高利用率",进一步加剧颠簸。应对手段:1)控制多道程序程度:通过工作集模型或缺页频率(PFF)算法动态调整并发进程数,必要时挂起部分进程;2)增加内存或优化程序的局部性(数据结构紧凑、顺序访问);3)调整交换策略:降低 swappiness、用 zswap 压缩换出、或干脆关闭 swap(配合 OOM 策略权衡)。易错点:颠簸与"内存不足被杀"不同——OOM killer 是内存耗尽的直接结果,颠簸是系统在耗尽边缘的长期低效状态。
追问方向:工作集模型如何度量、Linux 的 swappiness 参数语义、数据库 buffer pool 为何要避免被 swap。