Linux Swap 分区大小修改指南
什么是 Swap
Swap(交换空间)是 Linux 系统的一种虚拟内存技术。当物理内存不足时,系统会将不活跃的内存页面移动到 Swap 空间中,从而释放物理内存供活跃进程使用。
Swap 的作用:
- 扩展可用内存容量
- 防止内存耗尽导致系统崩溃
- 支持内存休眠(suspend to disk)
- 在内存压力时提供缓冲
修改 Swap 大小的三种方法
方法一:使用 swapfile(推荐)
这种方法最灵活,不需要重新分区。
步骤 1:查看当前 Swap 状态
1
2
3
4
5
6
7
8
|
# 查看当前 Swap 使用情况
free -h
# 查看 Swap 文件位置
swapon --show
# 查看磁盘空间
df -h
|
步骤 2:禁用现有 Swap
1
2
3
4
5
|
# 关闭 Swap
sudo swapoff -a
# 如果有多个 Swap,指定关闭特定文件
sudo swapoff /swapfile
|
注意: 关闭 Swap 前确保有足够的物理内存,否则可能导致程序崩溃。最好在系统负载低时操作。
步骤 3:创建新的 Swap 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 创建 4GB 的 Swap 文件(根据需要调整大小)
sudo fallocate -l 4G /swapfile
# 或者使用 dd 命令(更可靠)
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
# 设置正确的权限(必须为 600)
sudo chmod 600 /swapfile
# 格式化为 Swap 空间
sudo mkswap /swapfile
# 启用 Swap
sudo swapon /swapfile
|
步骤 4:设置为永久生效
1
2
3
4
5
6
7
|
# 添加到 /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 或者使用 UUID(更稳定)
sudo blkid /swapfile
sudo vim /etc/fstab
# 添加: UUID=xxx /swapfile none swap sw 0 0
|
方法二:调整现有 Swap 分区大小
适用于已经使用独立分区的系统。
使用 gparted(图形界面)
1
2
3
4
5
|
# 安装 gparted
sudo apt install gparted
# 启动(需要图形界面)
sudo gparted
|
操作步骤:
- 右键点击 Swap 分区 → 调整大小/移动
- 拖动滑块调整大小
- 点击"调整大小/移动"按钮应用
使用命令行工具
1
2
3
4
5
|
# 查看分区表
sudo fdisk -l
# 使用 cfdisk 或 parted
sudo cfdisk /dev/sda
|
警告: 调整分区需要谨慎,确保有足够的未分配空间。
方法三:增加多个 Swap 文件
1
2
3
4
5
6
7
8
9
10
11
|
# 创建额外的 Swap 文件
sudo fallocate -l 2G /swapfile2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon /swapfile2
# 添加到 fstab
echo '/swapfile2 none swap sw 0 0' | sudo tee -a /etc/fstab
# 查看所有 Swap
swapon --show
|
思维导图:Swap 修改决策流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
┌─────────────────────────────────────────┐
│ Linux Swap 修改决策流程 │
└─────────────────────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ 需要修改 Swap 吗? │
└───────────────────────────────────┘
│
┌──────────────────┴──────────────────┐
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ 是 │ │ 否 │
└─────────┘ └─────────┘
│ │
▼ ▼
┌─────────────────────────────┐ ┌─────────────────────────────┐
│ 当前是 Swap 文件还是分区? │ │ 操作完成 │
└─────────────────────────────┘ └─────────────────────────────┘
│
┌──────────────┴──────────────┐
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Swap 文件 │ │ Swap 分区 │
└─────────────┘ └─────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────────┐
│ 方法一:重建 Swap │ │ 方法二:调整分区大小 │
│ - swapoff │ │ - gparted(图形) │
│ - 创建新文件 │ │ - fdisk/parted(命令行)│
│ - mkswap │ │ - 需要未分配空间 │
│ - swapon │ │ - 风险较高 │
└──────────────────┘ └──────────────────────┘
│ │
└─────────────┬───────────────┘
│
▼
┌─────────────────────────────────────┐
│ 验证与配置 │
├─────────────────────────────────────┤
│ 1. swapon --show 验证启用 │
│ 2. free -h 检查内存状态 │
│ 3. /etc/fstab 配置永久生效 │
│ 4. vm.swappiness 优化(可选) │
└─────────────────────────────────────┘
|
Swap 大小建议
| 物理内存 |
推荐 Swap 大小 |
休眠需要 |
| ≤ 2GB |
2x 物理内存 |
3x 物理内存 |
| 2GB - 8GB |
等于物理内存 |
2x 物理内存 |
| 8GB - 64GB |
0.5x 物理内存 |
1.5x 物理内存 |
| > 64GB |
至少 4GB |
不建议使用休眠 |
注意事项
1. 操作前准备
- 备份重要数据:虽然修改 Swap 不会丢失数据,但以防万一
- 确保系统稳定:在低负载时操作
- 检查可用空间:确保有足够未分配的磁盘空间
2. 操作中注意事项
1
2
3
4
|
# 不要在内存不足时关闭 Swap
# 关闭前检查可用内存
free -h
# 确保 Available > 当前 Swap 使用量
|
3. 常见风险
- 数据丢失风险:操作分区时可能丢失数据,务必备份
- 系统不稳定:Swap 关闭期间可能导致 OOM(内存耗尽)
- 性能影响:过小的 Swap 会导致频繁交换,影响性能
4. 验证步骤
1
2
3
4
5
6
7
8
9
10
11
|
# 1. 验证 Swap 已启用
swapon --show
# 2. 检查内存状态
free -h
# 3. 测试 Swap 读写
sudo dd if=/dev/zero of=/dev/null bs=1M count=100 status=progress
# 4. 检查 fstab 配置
cat /etc/fstab | grep swap
|
优化 Swap 性能
调整 swappiness 参数
swappiness 值决定系统何时使用 Swap(0-100,值越高越倾向于使用 Swap):
1
2
3
4
5
6
7
8
9
|
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时修改
sudo sysctl vm.swappiness=10
# 永久修改
sudo vim /etc/sysctl.conf
# 添加: vm.swappiness=10
|
建议值:
- 桌面系统:60(默认值)
- 服务器:10(减少 Swap 使用,优先使用物理内存)
- 内存充足时:0(完全禁用 Swap)
其他优化
1
2
3
4
5
6
|
# 清除 Swap(将数据移回内存,需要足够物理内存)
sudo swapoff -a && sudo swapon -a
# 查看 Swap 使用情况
sudo swapon --show
top -o %MEM
|
常见问题
Q: Swap 文件比 Swap 分区慢吗?
A: 现代 SSD 上,差异几乎可以忽略。但机械硬盘上,分区可能稍快。
Q: 可以同时使用多个 Swap 文件吗?
A: 可以,但建议将最快的设备放在前面。
Q: 如何完全禁用 Swap?
1
2
3
4
5
6
|
# 关闭所有 Swap
sudo swapoff -a
# 注释掉 fstab 中的 Swap 行
sudo vim /etc/fstab
# 在 /swap 行前加 # 注释
|
Q: Swap 使用率很高正常吗?
A: 如果物理内存充足但 Swap 使用高,可能是 swappiness 值过高。如果物理内存不足,需要增加物理内存或 Swap。
总结
修改 Swap 大小是一个相对简单的操作,但需要谨慎:
- 优先使用 Swap 文件方法,风险最低
- 操作前确保数据备份
- 在低负载时操作
- 完成后验证和配置永久生效
- 根据系统需求调整 swappiness
合理配置 Swap 可以显著提升系统性能和稳定性。
参考命令汇总
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 查看 Swap 状态
free -h
swapon --show
# 关闭/启用 Swap
sudo swapoff -a
sudo swapon -a
# 创建 Swap 文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 配置永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 调整 swappiness
sudo sysctl vm.swappiness=10
|