【运维】Swap

📅 2026/7/28 14:59:23
【运维】Swap
在测试环境中我们经常遇到这样的场景物理内存被多服务挤占free -h显示剩余几十 MB服务进程无缘无故消失被 OOM Killer 处决SSH 连接超时compactd进程卡死 200 秒CPU 飙到 100%。根本原因内存严重不足时Linux 内核会启动一系列“自救”机制但这些机制在无 Swap 时往往会适得其反。本文将深入解释为什么测试环境开启 Swap并给出标准配置方案。一、内存耗尽时内核做了什么当物理内存RAM被占满且没有 Swap 交换空间时内核会按以下顺序“挣扎”内存回收kswapd– 尝试回收缓存/缓冲区但回收速度跟不上分配速度。内存压缩compactd– 尝试将碎片化的内存页“压缩”成连续的大块为后续大页分配做准备。压缩需要大量 CPU 遍历页表且会持有锁导致系统响应极慢。此时 SSH 守护进程sshd可能因 CPU 饥饿或内存分配阻塞而超时断开。OOM Killer 出手– 如果回收和压缩都无效内核最后一步是“选择”一个进程杀掉释放内存。OOM Killer 的评分机制oom_score会优先杀掉占用内存最多、运行时间最短的进程——你的关键微服务很可能中枪。无 Swap 时系统在“压缩”和“杀进程”之间反复横跳服务稳定性无从谈起。二、 Swap 能同时解决“被杀”与“被卡”否是物理内存紧张是否启用 Swap?kswapd 回收 cache内存仍不足compactd 高频压缩CPU 飙升 锁争用SSH 超时 / 服务假死OOM Killer 随机杀进程内核将不活跃页换出到 Swap释放连续物理内存块compactd 压力骤降系统响应恢复OOM Killer 不再触发2.1 防 OOM Killer提供“缓冲垫”Swap 相当于内存的“溢出仓库”。当 RAM 吃紧时内核优先将不常访问的冷数据如后台日志缓冲区、闲置服务的堆内存换出到磁盘。这降低了内存压力峰值让 OOM Killer 几乎没有机会触发从而保住所有运行中的服务。2.2 防 compactd 假死瞬间释放连续空间内存压缩compactd之所以耗时是因为它需要移动已分配的页来“拼出”大块连续区域。Swap 换出操作能直接整页回收腾出大量连续空闲页内核不再需要费力压缩。实测中开启 Swap 后compactd的 CPU 占用从 80% 降至 5%SSH 响应立即恢复。三、Swap 的另一个隐性价值把物理内存留给“热点”应用在微服务环境中大量服务会写入日志、缓存历史数据这些数据访问频率很低。如果它们全挤在 RAM 中真正高频使用的业务堆内存反而无处安放。内存类型无 SwapRAM 100%占用有 SwapRAM 70% Swap 30%热点应用堆频繁被换出/回收GC 压力大常驻 RAM性能稳定冷数据日志、历史缓存占用大量 RAM自动换出到 Swap不争抢资源系统缓存紧张充裕Swap 就像“内存分级存储”热数据走 RAM冷数据走 Swap让有限的内存用在刀刃上。四、一键创建 2GB Swap以下命令在 CentOS/Ubuntu 通用推荐 2~4GB视剩余磁盘而定# 1. 创建 2GB 空文件sudofallocate-l2G /swapfile# 2. 设置严格权限防止普通用户读取sudochmod600/swapfile# 3. 格式化为 swap 分区sudomkswap/swapfile# 4. 启用 swapsudoswapon/swapfile# 5. 开机自动挂载echo/swapfile none swap sw 0 0|sudotee-a/etc/fstab# 6. 调低 Swap 倾向优先使用物理内存避免过度依赖磁盘sudosysctlvm.swappiness10echovm.swappiness10|sudotee-a/etc/sysctl.confvm.swappiness10的含义取值范围 0~100值越大越积极使用 Swap。设为 10 表示仅在 RAM 使用超过 90% 时才换出优先压榨物理内存同时保留 Swap 作为“紧急避难所”。完成后执行free -h若 Swap 行显示2.0G即成功。五、最后Swap 是备胎不是主力就像汽车备胎平时用不上但爆胎时能让你开到修理厂。测试环境不会承受生产级流量Swap 的磁盘 I/O 影响完全可以接受。监控 Swap 使用率若free -h发现 Swap 使用率长期 50%说明物理内存确实不足。此时应增加 RAM 或优化服务内存占用而非无限扩大 Swap过度依赖 Swap 会导致性能雪崩。生产环境慎用生产环境若依赖 Swap 来“续命”往往掩盖了内存配置问题且磁盘 I/O 延迟会直接拖慢响应。测试环境则完全不同——稳定第一性能第二。小结小内存服务器Swap 不该是可选项而是默认配置。给测试环境加上 2~4G Swap你会发现“莫名其妙”的故障一夜消失。