在 CloudCone 等 KVM 架构 VPS 上,创建 swap 文件是防止内存不足导致进程被杀的快速止血方案,适合内存较小但磁盘空间充足的场景。
先说结论:配置 swap 能避免 OOM 崩溃,但会牺牲磁盘 I/O 性能,仅作为临时缓解或低负载补充,不能替代升级内存。
- 适合:内存低于 1GB 运行数据库、Java 应用或编译任务时。
- 先准备:确认虚拟化类型为 KVM,检查磁盘剩余空间。
- 验收:使用 free -h 确认 swap 总量变化,观察系统负载。
命令速用版
以下命令适用于大多数 Linux 发行版,需 root 权限执行:
dd if=/dev/zero of=/swapfile bs=1M count=1024
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
为什么会这样
当物理内存耗尽时,Linux 内核的 OOM Killer 机制会强制终止占用内存较高的进程以保护系统稳定。swap 是将部分暂时不用的内存数据写入磁盘空间,腾出物理内存给活跃进程。虽然磁盘读写速度远低于内存,但能防止服务直接中断。
分步处理
1. 确认虚拟化环境
CloudCone 主流套餐为 KVM 架构,支持自行配置 swap。如果是旧版 OpenVZ 架构,可能无法在内部创建 swap,需通过命令 cat /proc/vz/version 辅助判断,若存在该文件通常为 OpenVZ。
2. 检查磁盘空间
执行 df -h 确保根目录有足够剩余空间。swap 文件会占用实际磁盘容量,不要填满磁盘。
3. 创建 swap 文件
使用 dd 命令创建文件,大小根据需求调整,例如 1GB 对应 count=1024。完成后修改权限为 600,防止安全风险。
4. 启用并持久化
使用 mkswap 初始化,swapon 立即生效。最后写入 /etc/fstab 确保重启后自动挂载。
怎么验证是否生效
执行 free -h 查看 swap 行是否有数值。执行 swapon `--show` 列出当前启用的 swap 设备。观察 top 命令中的 %wa (iowait) 指标,若长期过高说明磁盘读写压力大。
常见坑
1. 不要过度依赖 swap,频繁使用会导致系统响应变慢,公开资料中没有看到可靠的量化数据表明具体慢多少,但体验差异明显。
2. 某些面板(如宝塔)自带 swap 管理工具,重复创建可能导致冲突。
3. 删除 swap 需先 swapoff 再删除文件,并清理 /etc/fstab 记录,否则重启可能失败。