如何在 Linux 中使用 swapoff 和 swapon 管理交换空间?

问题浏览数Icon
11
问题创建时间Icon
2025-03-07 13:08:00
作者头像
fengyun33

作为IT架构师,我认为在Linux中使用swapoff和swapon管理交换空间时应注意以下要点:

  1. 核心功能

    • swapoff:用于禁用指定交换分区/文件,释放内存中的交换数据
    • swapon:激活交换空间,需预先通过mkswap初始化
  2. 操作流程

    
    # 查看当前交换空间状态
    swapon --show  
    free -h  

禁用交换空间(确保物理内存充足)

swapoff /dev/sdX # 分区路径
swapoff /swapfile # 文件路径

重新启用交换

swapon /dev/sdX

临时禁用所有交换空间(慎用)

swapoff -a



3. **生产环境建议**  
- 操作前通过`free -h`监控内存使用,避免禁用交换空间导致OOM Killer终止进程  
- 永久生效需修改`/etc/fstab`注释对应条目  
- 调整交换空间大小时,推荐使用`fallocate`创建交换文件而非分区  
- 在内存密集型应用场景(如数据库)可考虑完全禁用交换,通过`vm.swappiness=0`参数优化  

4. **排错要点**  
- 出现"swapoff failed: Cannot allocate memory"时,先通过`swapoff -a`逐步释放  
- 使用`sysctl vm.swappiness`验证内核交换倾向参数  
- 通过`dmesg | grep -i swap`检查内核日志中的交换异常记录

更多回答

作者头像
xiaowen88

作为技术支持工程师,以下是我常用的解决方案,用于在 Linux 中通过 swapoff 和 swapon 管理交换空间:

  1. 查看当前交换空间状态
    free -hswapon --show,确认当前激活的交换分区/文件。

  2. 临时关闭交换空间(swapoff)

    • 关闭单个交换分区:sudo swapoff /dev/sdX(替换为具体分区,如/dev/sda2)
    • 关闭所有交换空间:sudo swapoff -a
    • 若存在进程占用导致无法关闭,可尝试 swapoff -a -v 查看详细日志并终止相关进程。
  3. 重新启用交换空间(swapon)

    • 启用单个交换分区/文件:sudo swapon /dev/sdXsudo swapon /swapfile
    • 启用所有配置的交换空间:sudo swapon -a
  4. 永久移除交换空间(需修改配置)

    • 编辑 /etc/fstab,注释或删除对应交换分区/文件的行
    • 执行 sudo swapoff -a 后重启系统。
  5. 调整交换文件(如扩容)

    • sudo swapoff /swapfile
    • sudo dd if=/dev/zero of=/swapfile bs=1G count=8(示例:创建8GB文件)
    • sudo chmod 600 /swapfile
    • sudo mkswap /swapfile
    • sudo swapon /swapfile

注意事项

  • 操作前确保系统有足够物理内存,避免宕机
  • 修改交换文件大小时需预留磁盘空间
  • 若使用交换分区,建议通过分区工具(如parted)调整
作者头像
mistgear99

在Linux里,用swapoff和swapon管理交换空间很简单。比如关掉所有交换分区就用sudo swapoff -a,想再打开就sudo swapon -a。如果只想操作某个交换文件(比如/swapfile),可以直接sudo swapoff /swapfile关掉,用sudo swapon /swapfile再启用。注意:关交换分区前确保内存够用,不然可能卡死!平时可以用free -h或者swapon --show看交换空间状态。

作者头像
vmstar01

步骤1:查看当前交换空间状态

sudo swapon --show  # 显示已启用的交换分区/文件
free -h             # 查看内存和交换空间使用情况

步骤2:禁用交换空间

sudo swapoff /swapfile          # 关闭指定交换文件/分区
sudo swapoff -a                 # 关闭所有交换空间(适用于多交换设备)

⚠️ 禁用时若交换空间被占用,操作可能耗时较长,期间内存压力增大

步骤3:重新启用交换空间

sudo swapon /swapfile          # 启用指定交换文件/分区
sudo swapon -a                 # 根据/etc/fstab配置启用所有交换空间

步骤4(可选):调整交换空间

  1. 创建新交换文件:
    sudo fallocate -l 4G /swap_new  # 创建4GB文件
    sudo mkswap /swap_new          # 格式化为交换空间
    sudo chmod 600 /swap_new
  2. 更新配置后通过swapon启用

步骤5:永久生效配置 修改/etc/fstab文件,注释或删除旧交换空间条目,添加新配置:

/swap_new none swap sw 0 0

⚠️ 生产环境建议在低负载时段操作,并确保物理内存充足

作者头像
liustar66

在Linux系统中,swapoff和swapon是管理交换空间的核心命令,其作用与注意事项如下:

  1. 功能说明

    • swapon [路径]:激活指定的交换分区或文件(如/dev/sdXN/swapfile
    • swapoff [路径]:停用指定交换空间,释放其占用的内存资源
  2. 操作流程

    • 查看当前交换空间:swapon -sfree -m
    • 停用交换空间:sudo swapoff /swapfile(需root权限)
    • 重新启用:sudo swapon /swapfile
    • 持久化配置:修改/etc/fstab确保重启生效
  3. 关键注意事项

    • 停用前需确保物理内存充足,避免触发OOM Killer
    • 修改交换文件大小时需先swapoff,再mkswap初始化
    • 使用swapoff -a可停用所有交换空间
    • 生产环境建议通过sysctl vm.swappiness动态调整交换策略
  4. 典型应用场景

    • 扩展/收缩交换空间容量
    • 迁移交换分区至高速存储
    • 排查内存泄漏时隔离交换空间影响
    • 系统维护期间释放交换资源