第 15 章 swap 空间
当物理内存(RAM)已满时,将使用 Linux 中的 交换空间。如果系统需要更多的内存资源并且 RAM 已满,内存中的不活动页面将移到交换空间。虽然交换空间可以帮助具有少量 RAM 的计算机,但不应将其视为更多 RAM 的替代品。交换空间位于硬盘驱动器上,其访问时间比物理内存要慢。交换空间可以是专用的交换分区(推荐)、交换文件,或者交换分区和交换文件的组合。请注意,Btrfs 不支持 swap 空间。
过去数年,推荐的 swap 空间会随系统中的 RAM 量增加而线性增大。然而,现代系统通常包含了成百 GB 内存。因此,推荐的交换空间被视为系统内存工作负载的功能,而不是系统内存的功能。
表 15.1 “推荐的系统交换空间” 根据系统中的 RAM 量以及是否有足够的内存供系统休眠显示推荐的交换分区的大小。推荐的 swap 分区会在安装过程中自动建立。但是,为了允许休眠,您需要在自定义分区阶段编辑交换空间。
表 15.1 “推荐的系统交换空间” 中的建议对于内存不足的系统(1 GB 及更少)尤为重要。无法在这些系统中分配足够 swap 空间可能会导致问题,如不稳定,甚至会导致安装的系统无法引导。
系统中的 RAM 量 | 推荐的 swap 空间 | 如果允许休眠则推荐使用 swap 空间 |
---|---|---|
⩽ 2 GB | RAM 量的 2 倍 | RAM 量的 3 倍 |
> 2 GB – 8 GB | 与 RAM 量相等 | RAM 量的 2 倍 |
> 8 GB – 64 GB | 至少 4 GB | RAM 量的 1.5 倍 |
> 64 GB | 至少 4 GB | 不推荐休眠 |
注意
不建议使用超过 64 GB RAM 的系统进行休眠的原因有两个。首先,休眠需要额外的空间用于 inflated (可能不经常使用)交换区。其次,将驻留的数据从 RAM 移到磁盘并回到磁盘的过程可以花费大量时间完成。
在 表 15.1 “推荐的系统交换空间” 中列出的每个范围之间的边界(例如,具有 2 GB、8 GB 或 64 GB 系统 RAM 的系统),可以根据所选交换空间和休眠支持进行判断。如果您的系统资源允许这样做,增加交换空间可能会导致更好的性能。
请注意,将交换空间分布到多个存储设备也可以提高交换空间的性能,特别是在具有快速驱动器、控制器和接口的系统上。
重要
在修改时,不应 使用分配被为交换空间的文件系统和 LVM2 卷。如果系统进程或内核正在使用交换空间,则任何修改交换的尝试都会失败。使用 free 和 cat /proc/swaps 命令验证交换的使用量以及位置。
在系统以
救援模式
引导时,您应该修改交换空间,请参阅 Red Hat Enterprise Linux 7 安装指南 中的 在 Rescue Mode 中引导您的计算机。当提示挂载文件系统时,请选择 。
15.1. 添加交换空间
有时,需要在安装后添加更多的交换空间。例如,您可以将系统中的 RAM 量从 1 GB 升级到 2 GB,但只有 2 GB 的交换空间。如果您执行内存密集型操作或运行需要大量内存的应用程序,则最好将交换空间大小增加到 4 GB。
您有三个选项:创建一个新的交换分区、创建一个新的交换文件,或者扩展现有 LVM2 逻辑卷上的交换空间。建议您扩展现有逻辑卷。
15.1.1. 在 LVM2 逻辑卷上扩展交换空间
默认情况下,Red Hat Enterprise Linux 7 在安装过程中使用所有可用空间。如果您的系统是这种情况,那么您必须首先向交换空间使用的卷组中添加一个新的物理卷。
在交换空间的卷组中添加额外的存储后,现在可以扩展它了。要做到这一点,请执行以下步骤(假设
/dev/VolGroup00/LogVol01
是您要扩展为 2 GB 的卷):
过程 15.1. 在 LVM2 逻辑卷上扩展交换空间
- 为关联的逻辑卷禁用交换:
# swapoff -v /dev/VolGroup00/LogVol01
- 将 LVM2 逻辑卷大小调整 2 GB:
# lvresize /dev/VolGroup00/LogVol01 -L +2G
- 格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol01
- 启用扩展的逻辑卷:
# swapon -v /dev/VolGroup00/LogVol01
- 要测试是否成功扩展并激活 swap 逻辑卷,请检查活跃 swap 空间:
$ cat /proc/swaps $ free -h
15.1.2. 为交换空间创建 LVM2 逻辑卷
要添加一个 swap 卷组 2 GB,假设
/dev/VolGroup00/LogVol02
是您要添加的交换卷:
- 创建大小为 2 GB 的 LVM2 逻辑卷:
# lvcreate VolGroup00 -n LogVol02 -L 2G
- 格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol02
- 在
/etc/fstab
文件中添加以下条目:/dev/VolGroup00/LogVol02 swap swap defaults 0 0
- 重新生成挂载单元以便您的系统注册新配置:
#
systemctl daemon-reload - 在逻辑卷中激活 swap:
# swapon -v /dev/VolGroup00/LogVol02
- 要测试是否成功创建并激活 swap 逻辑卷,请检查活跃 swap 空间:
$ cat /proc/swaps $ free -h
15.1.3. 创建一个交换文件
添加一个交换文件:
过程 15.2. 添加交换文件
- 以 MB 为单位确定新交换文件的大小,再乘以 1024 来确定块的数量。例如: 64MB swap 文件的块大小为 65536。
- 创建一个空文件:
# dd if=/dev/zero of=/swapfile bs=1024 count=65536
使用与所需块大小相等的值替换 count。 - 使用以下命令设定 swap 文件:
# mkswap /swapfile
- 更改交换文件的安全性,使其不可读。
# chmod 0600 /swapfile
- 要在引导时启用 swap 文件,以 root 用户身份编辑
/etc/fstab
,使其包含以下条目:/swapfile swap swap defaults 0 0
下次系统引导时,它会激活新的 swap 文件。 - 重新生成挂载单元,以便您的系统注册新的
/etc/fstab
配置:#
systemctl daemon-reload - 立即激活 swap 文件:
# swapon /swapfile
- 要测试新 swap 文件是否已成功创建并激活,请检查活跃 swap 空间:
$ cat /proc/swaps $ free -h