0%

linux交换分区swap

Linux 交换分区(Swap):虚拟内存的核心实现

Swap(交换分区 / 交换空间)是 Linux 系统中用于扩展内存能力的关键机制,它通过将磁盘空间模拟为 “虚拟内存”,解决了物理内存不足时的系统运行问题。理解 Swap 的工作原理和配置方法,对系统性能优化和稳定性保障至关重要。

Swap 的本质与核心价值

什么是 Swap?

Swap 是 Linux 内核使用的磁盘空间(分区或文件),用于临时存储物理内存中暂时不活跃的数据。当物理内存(RAM)不足时,内核会将这些 “不常用” 的数据转移到 Swap 中,释放物理内存给当前活跃的进程使用。

  • 形象比喻:物理内存是 “高速缓存”,Swap 是 “备用仓库”—— 常用物品放在缓存,暂时不用的移到仓库,需要时再取回来。

Swap 的核心作用

  • 避免 OOM 崩溃:当物理内存耗尽时,Swap 可防止进程因内存不足被内核强制杀死(OOM,Out Of Memory)。
  • 支持内存密集型任务:如数据库服务、虚拟机、大数据处理等,这些任务可能短时间占用远超物理内存的空间。
  • 实现系统休眠:休眠(Hibernate)时,内核会将内存中所有数据写入 Swap,下次开机时从 Swap 恢复状态。

Swap 的工作机制

内存页的 “换入” 与 “换出”

Linux 内存管理以 “页(Page,通常 4KB)” 为单位,Swap 的核心操作是内存页的 “换出”(从物理内存到 Swap)和 “换入”(从 Swap 到物理内存):

  • 换出(Swap Out):当物理内存使用率过高,内核通过页面置换算法(如 LRU,最近最少使用)找出 “不活跃页”,写入 Swap。
  • 换入(Swap In):当进程需要访问已被换出的内存页时,内核触发 “缺页中断”,将该页从 Swap 读回物理内存。

关键参数:vm.swappiness

控制内核使用 Swap 的 “积极程度”,取值范围 0-100:

  • 0:尽可能不使用 Swap,仅在物理内存耗尽时才换出(适合对延迟敏感的场景,如数据库)。
  • 100:积极使用 Swap,优先释放物理内存(适合内存紧张的桌面系统)。
  • 默认值:通常为 60,平衡性能与内存利用率。

查看 / 修改方法

1
2
3
4
5
6
7
8
# 查看当前值
cat /proc/sys/vm/swappiness

# 临时修改(重启失效)
sudo sysctl vm.swappiness=30

# 永久修改(需重启)
echo "vm.swappiness=30" | sudo tee -a /etc/sysctl.conf

Swap 的两种实现形式

Linux 支持两种 Swap 形式,功能相同但适用场景不同:

形式 特点 适用场景
Swap 分区 独立的磁盘分区,连续存储,性能略优 服务器、长期使用、需要休眠功能
Swap 文件 普通文件,可动态创建 / 调整,无需分区 临时扩展、云服务器(无多余分区)

Swap 的配置与管理

查看 Swap 状态

1
2
3
4
5
6
7
8
# 查看总内存与 Swap 使用情况(-h 表示人性化显示)
free -h

# 查看 Swap 分区/文件详情(类型、大小、使用率)
swapon --show

# 更详细的内存页统计(包括 Swap 活动)
vmstat 1 # 每秒输出一次内存状态,关注 si(换入)、so(换出)

创建 Swap 分区(推荐服务器使用)

步骤:
  1. 划分磁盘分区(以 /dev/sdb1 为例,需先通过 fdiskparted 创建分区):

    1
    2
    # 格式化分区为 Swap 格式
    sudo mkswap /dev/sdb1
  2. 启用 Swap 分区

    1
    sudo swapon /dev/sdb1
  3. 设置开机自动挂载(编辑 /etc/fstab):

    1
    echo "/dev/sdb1 none swap defaults 0 0" | sudo tee -a /etc/fstab

创建 Swap 文件(灵活便捷)

步骤:

  1. 创建 Swap 文件(以 4GB 为例,bs=1M 表示块大小 1MB,count=4096 表示 4096 块):

    1
    sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
  2. 设置权限(仅 root 可访问,避免安全风险):

    1
    sudo chmod 600 /swapfile
  3. 格式化文件为 Swap 格式

    1
    sudo mkswap /swapfile
  4. 启用 Swap 文件

    1
    sudo swapon /swapfile
  5. 设置开机自动挂载

    1
    echo "/swapfile none swap defaults 0 0" | sudo tee -a /etc/fstab

关闭与删除 Swap

1
2
3
4
# 临时关闭指定 Swap(分区或文件)
sudo swapoff /dev/sdb1 # 或 /swapfile

# 永久删除:从 /etc/fstab 中移除对应行,再删除分区/文件

Swap 的性能与优化建议

1. 性能注意事项

  • Swap 速度远低于物理内存:磁盘(即使 SSD)的读写速度比 RAM 慢 100-1000 倍,频繁的 “换入 / 换出”(称为 “Swap 颠簸”)会导致系统卡顿。
  • 避免过度依赖 Swap:Swap 仅应作为应急机制,长期高 Swap 使用率通常意味着需要增加物理内存。

2. 推荐大小配置

Swap 大小需根据物理内存和使用场景调整:

  • 普通服务器:物理内存 ≤ 8GB 时,Swap 建议等于物理内存;≥ 8GB 时,Swap 可设为 8GB(除非需要休眠)。
  • 需要休眠:Swap 大小必须 ≥ 物理内存(确保能容纳所有内存数据)。
  • 云服务器:可根据实际负载动态调整(如 2GB 物理内存配 1-2GB Swap)

欢迎关注我的其它发布渠道