在 Linux 系统中,Swap 是内核管理内存的重要组成部分。Swap 可以在物理内存不足时提供额外空间,避免系统 OOM(Out-Of-Memory)崩溃,但过度使用 Swap 会导致性能下降,甚至系统卡顿。
本文将全面讲解 Swap 的工作原理、监控方法、排查工具和优化策略,帮助运维和开发人员理解和管理 Swap。
一、Swap 基础知识
1. Swap 的概念
2. Swap 的作用
缓解内存压力
保护系统稳定性
辅助内核调度
3. Swap 的代价
Swap 位于磁盘,访问速度远低于 RAM。
高频使用 Swap → IO 压力大,系统卡顿。
典型表现:
二、Swap 使用监控工具
1. free
示例输出:
total used free shared buff/cache availableMem: 64Gi 50Gi 4Gi 1Gi 10Gi 12GiSwap: 16Gi 2Gi 14G
2. swapon -s
swapon -s
输出示例:
Filename Type Size Used Priority/dev/sda2 partition 16777212 2097152 -1
Size:Swap 分区总大小
Used:已使用大小
Priority:内核分配顺序,高优先级先使用
3. vmstat
示例输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 2048 4096 5120 10240 0 0 10 5 100 200 5 2 92 1 0
说明:si/so 大于 0 且持续增长 → 物理内存不足或进程占用大量冷页。
4. top / htop
在 top 中:
KiB Swap 显示 Swap 总量、已用量
可按 %MEM 排序查看占内存的进程
htop 可实时查看 swap 使用趋势
三、Swap 相关 /proc 文件详解
1. /proc/meminfo
cat /proc/meminfo | grep Swap
常用字段:
| |
|---|
| |
| |
| 已经被 swap 出的内存页仍在 page cache 中,可直接回收 |
SwapCached 表示 页面被换出到 swap 但仍在 RAM 中,再次访问可直接读回,无需磁盘 IO。
2. /proc/vmstat
cat /proc/vmstat | grep -i swap
重要字段:
| |
|---|
pswpin | |
pswpout | |
pgpgin | |
pgpgout | |
pswpin/pswpout 可以结合 vmstat 查看 swap 活跃度。
四、Swap 排查思路
检查总量和使用情况
分析是否频繁 swap
查看占内存进程
SwapCached 分析
结合 slab/page cache
echo 10 > /proc/sys/vm/swappinessecho 3 > /proc/sys/vm/drop_cache
内存被 page cache 或 slab cache 占用过多 → 考虑调整 swappiness 或释放缓存:
五、Swap 优化策略
1. 合理设置 swappiness
cat /proc/sys/vm/swappiness
2. 调整 Swap 分区/文件大小
物理内存 ≤ 16GB → swap = 2 × RAM
物理内存 > 16GB → swap = RAM 或 8~16GB
可通过 mkswap / swapon 动态调整 swap 文件
3. 内存压力管理
4. 监控与告警
六、总结一下吧