swap不是万能的,但缺失会导致oom kill;用swapon -s或free -h确认状态,dd比fallocate更可靠创建swap文件,需mkswap、chmod 600、写入fstab持久化,并调低swappiness减少ssd磨损。

Swap不是万能的,但没它时内存爆掉会直接OOM kill进程——先确认你真需要它,再动手。
怎么判断当前有没有Swap、用得怎么样
别猜,直接看 swapon -s 或 free -h。前者列出所有激活的Swap设备(含文件/分区),后者在第二行显示 Swap 行的 total 和 used。如果 total 是 0,说明没启用;如果 used 长期接近 total,说明 Swap 正在被高频使用,可能拖慢系统。
注意:free -h 显示的 available 值比 free 更真实反映可用内存,别只盯着 free 看。
用 dd 创建Swap文件比用 fallocate 更稳妥
很多教程推荐 fallocate -l 2G /swapfile,但它在某些文件系统(如XFS)上可能创建“稀疏文件”,mkswap 会失败并报错 read swap header failed: Invalid argument。
更可靠的做法是:
-
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048(创建 2GB 文件) -
sudo chmod 600 /swapfile(必须设权限,否则swapon拒绝启用) -
sudo mkswap /swapfile(这一步不可跳过,否则swapon会报错)
启用后必须加进 /etc/fstab 才能开机自启
执行 sudo swapon /swapfile 只是临时生效,重启就没了。要持久化,必须编辑 /etc/fstab:
在末尾追加这一行:/swapfile none swap sw 0 0
注意三点:
- 路径必须和你创建的一致,比如用了
/var/swap就不能写/swapfile - 第二个字段填
none,不是挂载点,别写成/swap或其他目录 - 第四个字段是
sw,不是defaults;写错会导致开机卡住或报错swapon failed
swappiness 值决定系统多“懒”才用Swap
默认值是 60,意思是物理内存用到约 40% 就开始往 Swap 写数据。对数据库类服务(如 MySQL、PostgreSQL)来说太激进了,容易引发 I/O 瓶颈。
临时调低:sudo sysctl vm.swappiness=10
永久生效:在 /etc/sysctl.conf 里加一行 vm.swappiness=10
SSD 用户尤其要注意:频繁 Swap 写入会加速 SSD 磨损,除非内存确实长期不足,否则建议设为 1 或 0,并配合监控内存压力(cat /proc/meminfo | grep -i "oom\|commit")。











