在 CentOS 系统中,当物理内存(RAM)资源紧张时,系统可能会变得响应迟缓,甚至导致应用程序崩溃或服务中断,为了应对这种情况,Linux 提供了一种名为“交换空间”的机制,它允许将硬盘的一部分空间用作虚拟内存,这种“将硬盘当内存使用”的技术,虽然无法替代物理内存的高速性能,但却是一种至关重要的内存压力缓解策略,能有效防止系统因内存耗尽而宕机。

什么是Swap空间?
Swap 并非物理内存的等价物,物理内存(RAM)由高速的DRAM芯片组成,访问速度极快,但容量有限且断电后数据会丢失,而 Swap 空间则是硬盘上的一个专用区域(可以是分区或文件),访问速度远慢于 RAM,但容量可以设置得很大,且数据持久化。
其核心工作原理是:当系统物理内存使用率过高时,内核会将一些不常用的内存页(pages)从 RAM 移动到 Swap 空间中,从而释放出宝贵的物理内存给更需要它的进程,当这些被移出的内存页再次被访问时,系统再将它们从 Swap 换回到 RAM 中,这个过程被称为“页面换入/换出”,虽然会带来一定的性能开销,但它确保了系统在内存压力下的稳定运行。
如何创建和配置Swap文件?
在 CentOS 中,创建一个 Swap 文件是启用虚拟内存最灵活、最常用的方法,因为它无需重新分区,大小也可以随时调整,以下是详细的操作步骤:
检查当前Swap状态
使用以下命令查看系统当前是否已经配置了 Swap:
swapon --show
或者使用 free 命令查看内存和 Swap 的总体情况:
free -h
如果没有任何输出,或者 Swap 行显示为 0,则表示当前系统未启用 Swap。
创建Swap文件
我们使用 fallocate 命令来创建一个指定大小的文件,创建一个 4GB 大小的 Swap 文件:
sudo fallocate -l 4G /swapfile
fallocate 命令不可用,也可以使用 dd 命令,但速度会慢一些:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
设置文件权限

为了安全起见,应将 Swap 文件的权限设置为只有 root 用户可以读写:
sudo chmod 600 /swapfile
格式化文件为Swap
将刚创建的文件格式化为 Swap 格式:
sudo mkswap /swapfile
启用Swap文件
立即启用这个 Swap 文件:
sudo swapon /swapfile
再次使用 swapon --show 或 free -h 命令,您应该能看到新的 Swap 空间已经生效。
设置开机自动挂载
为了让系统在重启后自动启用这个 Swap 文件,需要将其信息添加到 /etc/fstab 文件中,备份该文件:
sudo cp /etc/fstab /etc/fstab.bak
将以下行追加到 /etc/fstab 文件的末尾:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
优化Swap性能:Swappiness参数
swappiness 是一个内核参数,它定义了系统使用 Swap 的积极程度,其值范围是 0 到 100。
- 值越低:内核越倾向于避免使用 Swap,会尽可能地将数据保留在物理内存中,适合内存充裕的服务器环境。
- 值越高:内核越积极地使用 Swap,会更早地将内存页移动到 Swap 空间,适合内存较小或需要运行大量内存密集型应用的环境。
查看当前的 swappiness 值:

cat /proc/sys/vm/swappiness
默认值通常是 30,对于大多数 CentOS 服务器,建议将其调整为一个较低的值,10,以优先保证物理内存的性能。
临时修改:
sudo sysctl vm.swappiness=10
永久修改:
编辑 /etc/sysctl.conf 文件,在文件末尾添加:
vm.swappiness=10 保存文件后,执行 sudo sysctl -p 使配置立即生效。
下表小编总结了不同 swappiness 值的推荐场景:
| Swappiness 值 | 推荐场景 | 描述 |
|---|---|---|
| 0-10 | 数据库服务器、应用服务器(内存充足) | 最大程度避免使用 Swap,保证应用响应速度。 |
| 30-60 | 桌面系统、通用服务器(内存适中) | 平衡性能与稳定性,是大多数发行版的默认值范围。 |
| 60-100 | 内存极小的嵌入式设备或需要休眠功能的系统 | 积极使用 Swap,为休眠(Hibernate)提供足够空间。 |
相关问答FAQs
问题1:我的 Swap 文件应该创建多大?
解答: 这并没有一个绝对的标准,取决于您的物理内存大小和应用场景,一个传统的建议是 Swap 大小为物理内存的 1-2 倍,对于拥有大容量内存(如 16GB 或以上)的现代服务器,通常只需要创建一个较小的 Swap(如 2GB 到 8GB)作为应急缓冲,如果系统需要使用休眠功能,Swap 大小至少应等于物理内存大小,以确保能将所有内存内容保存到硬盘中,最佳实践是根据实际内存使用情况进行监控和调整。
问题2:使用 Swap 会减慢我的系统速度吗?
解答: 是的,会,硬盘(即使是高速 SSD)的访问延迟和吞吐量远低于物理内存,当系统频繁地进行内存页面换入/换出时,您会明显感觉到系统性能下降,应用程序响应变慢,Swap 的定位是“应急保障”而非“性能增强”,它通过牺牲部分性能来换取系统的稳定性,防止因内存耗尽导致的致命错误,优化 swappiness 参数可以在一定程度上减少不必要的 Swap 使用,从而减轻对性能的影响。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复