直接回答:swap 把内存中长期不活跃的匿名页(没有文件背书的页,如堆、栈数据)换出到磁盘,腾出物理内存;之后访问到这些页时触发缺页异常再换入。它本质是用磁盘扩展内存容量。

展开解析:代价是磁盘比内存慢几个数量级:内存访问纳秒级,SSD 微秒到毫秒级,一旦活跃工作集被换出,响应就出现毫秒级毛刺,对延迟敏感服务是灾难。vm.swappiness(默认 60,内核 5.8 起范围扩到 0~200)控制回收时"换出匿名页"相对"回收页缓存"的倾向:0 表示尽量避免换出但内存耗尽前仍可能换,并不是禁用。

实践要点:Redis、大数据组件常建议直接 swapoff 换确定性——内存耗尽宁可触发 OOM Killer 快速失败,也不要拖着整个集群变慢;代价是失去缓冲。折中方案是 zswap/zram:把"换出"的页压缩后仍留在内存,用 CPU 换空间,不落盘。查看某进程占了多少 swap:grep VmSwap /proc/<pid>/status;整体换入换出速率用 vmstat 的 si/so 列,持续非零就是预警信号。

追问方向:内存回收时页缓存和匿名页谁先谁后?为什么 Kubernetes 要求节点关闭 swap?OOM Killer 和 swap 是什么关系?