«

Linux添加Swap交换分区,解决内存不足问题

时间:2026-10-5 07:44     作者:emer     分类: 无


前言

服务器内存不够用了?MySQL 启动就报内存不足?或者运行着运行着就被 OOM Killer 杀进程了?这时候除了加内存条,还有个应急办法——加 Swap 交换分区。Swap 就是把磁盘的一部分当内存用,虽然慢,但能救急。本文就讲一下怎么在 Linux 下添加 Swap 交换分区。

什么是 Swap

Swap 交换分区,就是把磁盘的一部分空间当作内存来用。当物理内存不够的时候,系统会把不常用的内存数据换到磁盘上,腾出物理内存给正在用的进程。

注意: Swap 只是应急方案,不能当内存用。磁盘比内存慢几百倍,如果频繁使用 Swap,系统会非常卡。

第一步:查看当前 Swap 情况

先看看现在有没有 Swap,多大:

free -h

输出示例:

              total        used        free      shared  buff/cache   available
Mem:          1.8Gi       1.2Gi       200Mi        50Mi       400Mi       300Mi
Swap:            0B          0B          0B

上面的例子里 Swap 是 0B,说明没有配置 Swap。

也可以看:

swapon -s

第二步:创建 Swap 文件

我们用文件的方式创建 Swap,比分区方式灵活,随时可以删。

1. 创建一个 2G 的 Swap 文件

dd if=/dev/zero of=/swapfile bs=1M count=2048

参数说明:

2. 设置文件权限

chmod 600 /swapfile

必须设置成 600,不然系统不认。

3. 格式化成 Swap

mkswap /swapfile

输出会显示:

Setting up swapspace version 1, size = 2097151 KiB
no label, UUID=xxxx-xxxx

第三步:启用 Swap

swapon /swapfile

查看是否启用成功:

free -h

现在应该能看到 Swap 那行有数值了。

第四步:配置开机自动挂载

写入 /etc/fstab,重启后自动启用。

vi /etc/fstab

在最后一行添加:

/swapfile swap swap defaults 0 0

第五步:调整 Swap 使用优先级

Linux 默认是尽量用物理内存,Swap 只用在内存不够的时候。这个策略一般不用改。

如果想调整 Swap 的使用倾向,可以改 /etc/sysctl.conf:

vm.swappiness = 10

swappiness 值范围是 0~100:

改完执行:

sysctl -p

常见操作

查看 Swap 使用情况

swapon -s

关闭 Swap

swapoff /swapfile

删除 Swap

swapoff /swapfile
rm /swapfile

然后把 /etc/fstab 里那行也删掉。

实际应用场景

场景1:MySQL 启动报内存不足

MySQL 启动的时候需要加载很多数据到内存,如果内存不够会直接启动失败。加个 Swap 就能启动了。

场景2:临时跑大任务

有时候要临时跑个大任务,内存不够,加个 Swap 救急。

场景3:防止 OOM Killer 杀进程

内存不够的时候,系统会用 OOM Killer 杀掉占内存最多的进程。加个 Swap 能缓冲一下,避免直接被杀。

常见坑

坑1:Swap 文件权限不对

创建完 Swap 文件之后忘了 chmod 600,结果 swapon 报错。

解决: 一定要先设置权限:

chmod 600 /swapfile

坑2:/etc/fstab 写错了

和挂载硬盘一样,/etc/fstab 写错了重启会进不去系统。

解决: 改完先执行 swapon -a 测试一下。

坑3:Swap 太大了影响性能

Swap 不是越大越好。如果 Swap 用得很频繁,系统会非常卡,因为磁盘比内存慢几百倍。

建议: Swap 大小设成物理内存的 0.5~2 倍就够了。比如 2G 内存,Swap 设 2~4G 就行。

坑4:SSD 上放 Swap 还好,机械硬盘上放 Swap 很卡

如果是机械硬盘,频繁读写 Swap 会非常卡。SSD 还好一点。

总结

添加 Swap 的完整流程:

  1. dd 创建 Swap 文件
  2. chmod 600 设置权限
  3. mkswap 格式化
  4. swapon 启用
  5. 写 /etc/fstab 开机自动挂载
  6. 调整 swappiness 优先级

Swap 只是应急方案,真正解决内存不足还是要加物理内存。但应急的时候,Swap 确实能救一命。

遇到问题加QQ23979811 协助处理

标签: Linux 服务器运维 swap 交换分区 内存不足