Swap 活跃不等于内存耗尽,内核会主动换出冷匿名页以优化文件缓存;需关注 swappiness 设置及持续高 pgpgin/pgpgout 速率,而非 free -h 中的 Swap used 数值。

Swap 被使用 ≠ 内存已耗尽
Linux 的 swap 活跃并不自动等价于内存严重不足。内核在空闲内存尚有余量时,就可能将部分不常访问的匿名页(如进程堆内存)换出到 swap,以腾出更多页框给文件缓存(page cache)——这反而能提升整体 I/O 性能。是否构成问题,要看 swap 的活动模式和速率。
关键看 swappiness 和换入/换出速率
swappiness 参数(默认 60)控制内核倾向使用 swap 的激进程度。值越低,越倾向于回收文件页而非换出匿名页;设为 0 并不完全禁用 swap(仅在内存极度紧张时才用)。真正需警惕的是持续的高 pgpgin/pgpgout(单位:KB/s),可通过 vmstat 1 或 cat /proc/vmstat | grep -E "pgpgin|pgpgout" 观察:
- 瞬时小幅
swap使用(如休眠进程被换出)属正常 - 每秒数 MB 的
pgpgout持续 30 秒以上,大概率表明物理内存长期承压 -
si(swap-in)值高且伴随明显延迟,说明进程正频繁等待换入,此时响应变慢是真实瓶颈
free -h 显示 swap used 不代表正在换页
free -h 中的 Swap: used 仅表示已分配的 swap 空间,不反映当前活跃换页行为。一块被预分配但长期未读写的 swap 区域,不会拖慢系统。验证是否真在换页,应结合:
-
sudo iotop -oP查看是否有进程在做swapI/O -
cat /proc/swaps确认各swap分区/文件状态(priority、type) -
grep -i "swap" /proc/meminfo中的SwapCached值高,说明换出页近期又被读回,可能因swappiness设置不当或工作集突增
SSD 上 swap 的实际影响比想象中小
现代 SSD 的随机写延迟(~100μs)远低于传统 HDD(~10ms),使得轻量级 swap 活动对交互式应用影响有限。但要注意:
- 频繁换页仍会增加 SSD 写入量,缩短寿命(尤其低端 TLC/QLC 盘)
-
zram(压缩内存)在多数桌面/服务器场景下比磁盘swap更高效,启用只需sudo modprobe zram num_devices=1+ 配置/sys/class/zram-control/hot_add - 若业务进程明确要求低延迟(如实时音频、高频交易),即使有 SSD,也应通过
mlock()或memlock限制避免关键内存被换出
free 输出里那个静态的 “used” 数字。










