Linux 可以在 RAM 与交换后端存储之间移动选定的匿名内存页。这样既能保留不活跃内存,又能释放 RAM 供活跃工作负载和文件系统缓存使用,但存储速度远慢于 RAM。交换空间是容量和内存管理工具,不能替代充足内存,也不能充当应用程序内存限制。
文件系统 · 第 8 课
交换空间
了解 Linux 如何使用、初始化、激活、规划大小并安全停用交换空间。
交换空间如何参与内存管理
根据工作负载、内存压力、cgroup 和 swappiness 等可调参数,内核可能会在 RAM 尚未完全耗尽前使用交换空间。文件后端的干净内存页通常可以丢弃,之后再从文件读取;匿名页则需要交换空间,或必须留在 RAM 中。
长期大量交换可能造成严重延迟或颠簸。应诊断内存需求、工作集、压力和应用程序限制,而不要把扩大交换区域视为通用性能修复方法。
哪种内存是存入交换空间的主要候选?
检查活动交换空间
先使用只读命令:
$ swapon --show
$ cat /proc/swaps
$ free -h
这些命令显示已配置的活动交换区域和汇总内存数字。“已用”值非零并不自动表示存在问题;应把它与换入和换出速率、内存压力、延迟及工作负载行为联系起来。
哪个命令以结构化视图列出活动交换区域?
初始化并激活交换设备
mkswap 会写入交换签名,并破坏目标原有的可用元数据。练习时只能使用经过核实的可丢弃目标:
$ sudo mkswap /dev/VERIFIED-SWAP-TARGET
$ sudo swapon /dev/VERIFIED-SWAP-TARGET
运行 mkswap 前,应像运行 mkfs 前一样,核实型号、序列号、容量、持久身份、现有签名、挂载、RAID、LVM、加密和备份。激活后,用 swapon --show 确认准确来源。
若要持久启用,可在 /etc/fstab 中使用交换空间 UUID,并根据本地策略填写类型和选项:
UUID=VERIFIED-SWAP-UUID none swap sw 0 0
哪个命令会激活已经初始化的交换区域?
交换文件与其他后端
交换文件无需重新分区即可灵活增加容量,但创建要求取决于文件系统。文件必须具备严格权限、合适的实际分配,不能存在不受支持的空洞或写时复制行为,还要写入交换签名并激活。应遵循文件系统和发行版文档,不要把某个通用 fallocate 流程原样套用到所有环境。
zram 等压缩 RAM 设备可以提供另一层交换空间,但会产生不同的 CPU 和容量取舍。加密交换空间可以保护静态页面;休眠则需要恢复配置以及容量足够且合适的存储。这些目标都会影响容量规划和设计。
不存在“交换空间必须等于 RAM 两倍”的通用规则。应根据工作负载峰值、期望的故障行为、休眠需求、存储延迟与耐久性、崩溃转储设计和运维监控来规划大小。
规划交换空间大小的最佳依据是什么?
安全停用交换空间
使用以下命令停用一个经过核实的特定区域:
$ sudo swapoff /dev/VERIFIED-SWAP-TARGET
内核必须把其中驻留的交换页移到其他位置。如果 RAM 和剩余交换空间无法容纳它们,操作可能失败或造成危险的内存压力。应先停止或限制工作负载并监控内存;只有核实目标正确后才移除持久 fstab 条目;重新利用存储前,再用 swapon --show 确认已经停用。
为什么 swapoff 可能在高负载系统上失败或造成危险?
可以在受控环境中通过在 Linux 中创建和激活交换文件练习文件权限、激活和持久配置。
课程已完成
你已完成 交换空间
现在,你可以把交换空间视为明确的内存管理资源。
理解交换空间主要用于内存压力下的匿名内存。
更改容量前,检查活动交换空间和工作负载行为。
只初始化经过核实的可丢弃目标,再用
swapon激活。根据工作负载和休眠要求规划并保护交换空间。
使用
swapoff前确保具备重新安置内存页的容量。