🧠 1、什么是 Swap?它是怎么工作的?
当你在 Linux 上运行程序时,系统主要使用物理内存(RAM)来存储正在运行的数据。
但当内存不够时,为了不崩溃,Linux 会把一部分“暂时不用”的内存内容转存到硬盘,这块硬盘区域就叫 Swap(交换空间)。
你可以把它想象成「假内存」,在紧急时刻顶一顶:
- 系统会把不活跃的数据页从内存“换出”到 swap 区(swap out);
- 等你下次需要,再“换入”回内存(swap in);
Swap 的形式通常是:
- 一个独立的分区(系统安装时设置)
- 或一个普通文件(推荐,灵活)
✅ Swap 的优点:
- 防止程序因内存不足被系统强杀(OOM)
- 保持系统稳定性,尤其在小内存服务器上非常实用
⚠️ Swap 的缺点:
- 硬盘速度比内存慢得多,频繁 swap 会导致系统变卡
🔧 2、如何配置 Swap(使用 swap 文件)
以下是推荐的 Swap 配置方式,适合内存小(例如 2GB 服务器)、硬盘有空余的机器。
1️⃣ 创建 swap 文件
sudo fallocate -l 1G /swapfile
如 fallocate
不支持,可用:
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
2️⃣ 设置权限并格式化
sudo chmod 600 /swapfile
sudo mkswap /swapfile
3️⃣ 启用 swap
sudo swapon /swapfile
4️⃣ 设置开机自动启用
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
5️⃣ 设置 swap 使用策略:vm.swappiness
这个值表示 Linux 在什么条件下启用 swap。范围是 0~100,推荐设置为 10
,意思是尽量用物理内存,实在不够再用 swap。
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
🧼 3、删除 swap(可选)
如果你不再需要 swap,可以手动关闭并删除:
sudo swapoff /swapfile
sudo rm /swapfile
此外,如果你之前为 swap 设置了开机自动挂载,还需要从系统挂载配置文件中移除对应的那一行。打开配置文件:
sudo nano /etc/fstab
找到并删除这一行(就是你之前添加的):
/swapfile none swap sw 0 0
保存退出即可。
⚙️ 4、附:一键配置 Swap 脚本
你可以将以下内容保存为 setup_swap.sh
,执行它即可完成以上全部配置:
#!/bin/bash
# === 一键配置 Swap 工具 ===
SWAP_SIZE="1G"
SWAP_FILE="/swapfile"
echo "[+] 创建 $SWAP_SIZE 的 swap 文件: $SWAP_FILE"
sudo fallocate -l $SWAP_SIZE $SWAP_FILE || sudo dd if=/dev/zero of=$SWAP_FILE bs=1M count=1024
echo "[+] 设置文件权限..."
sudo chmod 600 $SWAP_FILE
echo "[+] 格式化为 swap..."
sudo mkswap $SWAP_FILE
echo "[+] 启用 swap..."
sudo swapon $SWAP_FILE
echo "[+] 设置开机自动挂载..."
grep -q "$SWAP_FILE" /etc/fstab || echo "$SWAP_FILE none swap sw 0 0" | sudo tee -a /etc/fstab
echo "[+] 设置 swappiness=10..."
sudo sysctl vm.swappiness=10
grep -q "vm.swappiness" /etc/sysctl.conf || echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
echo "[✅] 完成!当前内存状态如下:"
free -h
使用方式:
chmod +x setup_swap.sh
./setup_swap.sh