当前位置:首页>Linux>Linux Swap 分区深度解析:原理、监控与优化指南

Linux Swap 分区深度解析:原理、监控与优化指南

  • 2026-10-25 21:43:25
Linux Swap 分区深度解析:原理、监控与优化指南

在 Linux 系统中,Swap 是内核管理内存的重要组成部分。Swap 可以在物理内存不足时提供额外空间,避免系统 OOM(Out-Of-Memory)崩溃,但过度使用 Swap 会导致性能下降,甚至系统卡顿。

本文将全面讲解 Swap 的工作原理、监控方法、排查工具和优化策略,帮助运维和开发人员理解和管理 Swap。


一、Swap 基础知识

1. Swap 的概念

  • Swap 是 Linux 将不常用的内存页(page)从物理内存移到磁盘上的机制。

  • Swap 可以是:

    • Swap 分区(建议在系统安装时配置)

    • Swap 文件(灵活可扩展)

  • Swap 页分配是内核自动管理的,按需回收。

2. Swap 的作用

  1. 缓解内存压力

    • 当 RAM 不够时,将冷页(长时间未使用的页)换出到 Swap。

  2. 保护系统稳定性

    • 避免物理内存耗尽导致 OOM。

  3. 辅助内核调度

    • 内核可根据进程访问频率和优先级调整内存页。

3. Swap 的代价

  • Swap 位于磁盘,访问速度远低于 RAM。

  • 高频使用 Swap → IO 压力大,系统卡顿。

  • 典型表现:

    • si/s o(swap in / swap out)数值高

    • vmstat 或 top 中 Swap 占用持续增加


二、Swap 使用监控工具

1. free

free -h

示例输出:

              total        used        free      shared  buff/cache   availableMem:           64Gi       50Gi        4Gi       1Gi        10Gi       12GiSwap:          16Gi        2Gi       14G
  • Swap used → 当前被使用的 swap 容量。

  • Swap free → 可用 swap 容量。

2. swapon -s

swapon -s

输出示例:

Filename                Type        Size    Used    Priority/dev/sda2               partition   16777212    2097152    -1
  • Size:Swap 分区总大小

  • Used:已使用大小

  • Priority:内核分配顺序,高优先级先使用

3. vmstat

vmstat 2 5

示例输出:

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 (swap in) → 从 swap 读回内存页数(KB/s)

  • so (swap out) → 写入 swap 页数(KB/s)

  • swpd → 已使用 swap 总量(KB)

说明:si/so 大于 0 且持续增长 → 物理内存不足或进程占用大量冷页。

4. top / htop

在 top 中:

  • KiB Swap 显示 Swap 总量、已用量

  • 可按 %MEM 排序查看占内存的进程

  • htop 可实时查看 swap 使用趋势


三、Swap 相关 /proc 文件详解

1. /proc/meminfo

cat /proc/meminfo | grep Swap

常用字段:

字段
含义
SwapTotal
总 swap 空间
SwapFree
空闲 swap 空间
SwapCached
已经被 swap 出的内存页仍在 page cache 中,可直接回收

SwapCached 表示 页面被换出到 swap 但仍在 RAM 中,再次访问可直接读回,无需磁盘 IO。

2. /proc/vmstat

cat /proc/vmstat | grep -i swap

重要字段:

字段
含义
pswpin
从 swap 读回到物理内存的页数
pswpout
写入 swap 页数
pgpgin
从块设备读入的页面数
pgpgout
写入块设备页面数

pswpin/pswpout 可以结合 vmstat 查看 swap 活跃度。


四、Swap 排查思路

  1. 检查总量和使用情况

    free -hswapon -s
  2. 分析是否频繁 swap

    • vmstat 2 5 → si/so 持续 > 0 → 内存压力大

  3. 查看占内存进程

    top -o %MEM
  4. SwapCached 分析

    • 高 SwapCached → 页被换出但仍可能被访问,可优化缓存策略

  5. 结合 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
  • 默认 60(偏高,容易 swap)

  • 可调低至 10~20,延迟 swap 使用,提升性能

2. 调整 Swap 分区/文件大小

  • 物理内存 ≤ 16GB → swap = 2 × RAM

  • 物理内存 > 16GB → swap = RAM 或 8~16GB

  • 可通过 mkswap / swapon 动态调整 swap 文件

3. 内存压力管理

  • 优化进程内存占用

  • 使用 cgroup 对容器或服务限制内存

  • 定期清理 page cache 或 tmpfs 临时数据

4. 监控与告警

  • 使用 vmstat, sar, top 做 Swap 使用监控

  • 高 si/so → 告警,避免系统性能下降


六、总结一下吧

  • Swap 是 Linux 内核的重要内存保护机制,但频繁 swap 会严重影响性能。

  • 监控 Swap 时需结合:

    • free、swapon → 总量和已用量

    • vmstat → swap in/out 速率

    • /proc/meminfo 和 /proc/vmstat → 内核级指标

    • top/htop → 占用内存进程

  • 优化策略包括调整 swappiness、增加物理内存、控制进程内存、合理规划 swap 分区或文件。

最新文章

随机文章