悠悠楠杉
Ubuntu20.04交换空间扩容指南:手把手教你添加Swap分区
为什么需要Swap空间?
最近在折腾一台老旧的Ubuntu开发机时,频繁遇到内存不足导致进程被杀的情况。这让我意识到——是时候给系统加点"缓冲地带"了。Swap空间本质上是用硬盘空间模拟内存,当物理内存耗尽时,系统会将不活跃的内存页暂存到Swap中。虽然速度比不上物理内存,但总比直接崩溃强得多。
对于云服务器用户来说,Swap更是救命稻草。某次我的2GB内存小服务器跑MySQL时,就是因为没配置Swap,直接OOM(内存溢出)崩了服务。血泪教训告诉我们:没有Swap的Linux系统就像没备胎的汽车。
实战:三步创建Swap文件
第一步:检查现有Swap状态
打开终端,先摸清家底:
bash
sudo swapon --show
free -h
如果显示"no swap"或只有很小的分区(通常<1GB),就需要扩容了。我的案例中,一台4GB内存的机器默认只配了1GB Swap,编译大型项目时根本不够用。
第二步:创建Swap文件的最佳实践
传统教程会直接让你用dd
创建文件,但这里有个坑——稀疏文件可能带来性能问题。更推荐的做法是:
bash
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
这里-l 4G
表示创建4GB文件(建议值为物理内存的1-2倍)。用fallocate
比dd
快十倍不止,而且不会真写数据,瞬间完成。
关键细节:
- 文件位置最好放在SSD根目录(HDD用户建议放最快磁盘)
- 避免放在已加密的目录(如/home)影响性能
- 大内存机器(32G+)可以适当减少Swap比例
第三步:启用并永久生效
激活Swap文件:
bash
sudo swapon /swapfile
然后编辑/etc/fstab
添加:
/swapfile none swap sw 0 0
记得用sudo nano /etc/fstab
,别用图形化编辑器,权限容易出问题。
高级调优技巧
Swappiness参数优化
默认值60对于桌面还行,但服务器建议调低:
bash
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
这个值(0-100)控制系统使用Swap的积极程度。数据库服务器可以设为5-10,图形工作站保持30-60。
优先级设置(多Swap时)
如果有多个Swap设备,可以设置优先级:
bash
sudo swapon -p 100 /swapfile
数字越大优先级越高,系统会优先使用高优先级的Swap空间。
避坑指南
文件权限错误:务必确保
chmod 600 /swapfile
,否则系统会拒绝使用休眠支持问题:如果要启用休眠,需要Swap大于内存大小,且需修改
/etc/initramfs-tools/conf.d/resume
Btrfs文件系统:需要额外参数
sudo mkswap -f /swapfile
云服务商限制:某些VPS(如AWS某些实例)默认禁用Swap,需修改云初始化配置
性能测试对比
在我的ThinkPad T480(8G内存+SSD)上测试:
- 无Swap时:编译Linux内核到85%报OOM
- 2G Swap:编译完成,但出现明显卡顿
- 4G Swap:流畅完成,swappiness=10时Swap使用率仅15%
建议用vmstat 1
监控si/so
(Swap in/out)值,如果持续过高,说明需要加物理内存了。
结语
合理配置Swap就像给系统买了份保险——平时用不上,关键时刻能救命。特别是对于预算有限的学生开发者或小型服务器,Swap的成本效益比极高。完成配置后,不妨用htop
观察内存使用情况,你会发现系统变得更加游刃有余了。
小贴士:如果后期升级了物理内存,记得用
sudo swapoff /swapfile && sudo rm /swapfile
清理不必要的Swap文件,避免浪费SSD寿命。