在 Hyper-V 中配置 Ubuntu 的 Swapper(交换空间)
一 概念与准备
- Swapper 在 Linux 中对应的是交换空间(swap),用于在物理内存不足时将部分数据换出到磁盘,保障系统稳定。常见形态有交换文件(swapfile)与交换分区(swap partition),二者在 Hyper-V 虚拟机中的使用方式与普通 Linux 一致。
- 在 Hyper-V 上运行 Ubuntu 虚拟机,可通过虚拟交换机连接网络、分配内存等,这些与交换空间配置互不冲突。若尚未创建虚拟机,可先完成 Hyper-V 的基础设置(虚拟交换机、内存分配、安装 Ubuntu)。
二 快速启用交换文件(推荐)
以下步骤在 Ubuntu 来宾系统内执行,适用于大多数桌面与服务器场景:
- 查看当前交换状态
- 查看是否已启用交换:sudo swapon --show
- 查看内存与交换概览:free -h
- 创建交换文件(示例为 4GB)
- 建议先确保根分区有充足空间:df -h /
- 创建文件:sudo fallocate -l 4G /swapfile
- 若 fallocate 失败,可改用:sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
- 设置权限并格式化为交换
- 仅 root 可读写:sudo chmod 600 /swapfile
- 格式化为交换:sudo mkswap /swapfile
- 启用交换
- 立即启用:sudo swapon /swapfile
- 持久化(开机自动启用)
- 编辑 /etc/fstab,添加:/swapfile none swap sw 0 0
- 验证
- 再次查看:free -h 与 swapon --show,应能看到新交换文件与容量。
三 调整大小与删除
- 调整大小(示例从 4GB 调整到 8GB)
- 先禁用:sudo swapoff /swapfile
- 调整文件大小:sudo fallocate -l 8G /swapfile(或用 dd 重建)
- 重新格式化:sudo mkswap /swapfile
- 重新启用:sudo swapon /swapfile
- 验证:free -h
- 删除交换文件
- 禁用:sudo swapoff /swapfile
- 删除文件:sudo rm /swapfile
- 从 /etc/fstab 移除对应行并保存。
四 性能优化与监控
- 调整 swappiness(控制内核使用交换的倾向,范围 0–100,默认 60)
- 临时生效:sudo sysctl vm.swappiness=10
- 永久生效:在 /etc/sysctl.conf 中添加 vm.swappiness=10,然后执行 sudo sysctl -p
- 启用 Zswap(在内存中压缩交换页,减少磁盘写入)
- 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中加入:zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20
- 更新 GRUB:sudo update-grub 并重启
- 监控与排障
- 实时查看内存与交换:free -h
- 观察交换活跃度:vmstat 1(关注 si/so 列,频繁非零表示大量换入换出,可能存在性能瓶颈)。
五 使用交换分区与 Hyper-V 场景建议
- 使用交换分区(适合对性能更敏感的场景)
- 使用分区工具(如 fdisk/parted)创建分区,并将类型设为 Linux swap(82)
- 格式化:sudo mkswap /dev/sdXN
- 启用:sudo swapon /dev/sdXN
- 持久化:在 /etc/fstab 添加 /dev/sdXN none swap sw 0 0
- Hyper-V 场景建议
- 优先使用交换文件(灵活、易调整大小),无需修改分区表,便于在虚拟机中维护。
- 若宿主机为 SSD/NVMe,交换性能更佳;尽量避免将交换放在性能较差的存储上。
- 内存充足(如 ≥16GB)且负载稳定时,可适度降低交换大小,甚至考虑禁用;但在内存紧张或可能出现 OOM 的场景,建议保留一定交换空间以保障稳定性。