内存不够?用 Swap 顶一顶:Linux 虚拟内存实战指南

🧠 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值