CentOS 中 swapper 在容器环境中的表现
概念澄清
- 在 Linux/CentOS 中,swapper 通常指内核的交换机制与相关内核线程,用于在 物理内存 与 交换空间(swap) 之间进行页面换入/换出;与之相关但不同的概念是“交换空间”(swap 分区或文件)。容器并不会为每个容器单独运行独立的 swapper,容器内的“swapper”表现本质上是宿主机内核在全局内存压力下对页面进行回收与换页的结果,只是作用域被 cgroups/memory 限制在该容器的内存配额内。
行为特征
- 作用域与配额:容器的内存受 cgroups memory 限制;当容器用满其配额,缺页异常会触发内核回收,必要时发生换页。若宿主机启用了 swap,内核可能把容器内不活跃页换出到宿主机的 swap;若未启用 swap,容器更容易被 OOM Killer 终止。
- 性能影响:换页本质是磁盘 I/O,过度换页会引发“交换风暴”,导致 延迟上升、吞吐下降。在 SSD 上虽可降低访问延迟,但会增加写放大与磨损;对延迟敏感的业务应谨慎使用 swap。
- 资源开销:页面置换与缺页处理会带来 CPU 开销;大量换页时,内存管理相关 CPU 占用上升,整体响应变慢。
与宿主机的关系
- 交换空间位置:容器没有独立的 swap;是否发生换页取决于 宿主机 是否配置并启用了 swap 分区/文件。
- 配置与可见性:通常在宿主机上统一配置和管理 swap(如创建 /swapfile、设置 /etc/fstab),容器通过内存限制间接影响换页倾向与可能性。
- 运行时控制:容器平台(如 Docker/K8s)通过 –memory、–memory-swap 等参数限制容器内存与“内存+swap”的上限,从而影响内核在容器内的回收与换页策略。
监控与调优建议
- 快速观测:在容器内使用 free -m、top、vmstat 1(关注 si/so 持续不为 0 表示持续换入/换出),在宿主机上结合 /proc/meminfo、容器运行时指标观察内存与 OOM 事件。
- 倾向性调优:通过内核参数 vm.swappiness(0–100) 调整换页倾向;值越高越倾向使用 swap,默认值通常较高(如 60),对延迟敏感场景可适当降低以减少换页。
- 容量与策略:结合业务特性规划 swap;通用建议为物理内存的 1.5–2 倍,但在延迟敏感或内存充足场景可减小或禁用 swap(注意禁用可能增加 OOM 风险)。
- 运行时约束:为容器设置合理的内存上限(如 –memory),必要时将 –memory-swap 设为与 –memory 相同以禁止容器使用宿主机的 swap,避免跨容器影响与性能抖动。