在 CentOS 系统中,虚拟缓存通常指的是“交换空间”,它是一种磁盘上的虚拟内存,当系统的物理内存(RAM)不足时,操作系统会将一部分不常访问的内存页从 RAM 移动到交换空间中,从而为需要更多内存的活跃进程释放空间,合理配置交换空间可以有效防止系统因内存耗尽而崩溃,提升多任务处理能力和系统稳定性,本文将详细介绍如何在 CentOS 中设置和管理交换空间。
检查当前交换空间状态
在进行任何更改之前,首先需要了解系统当前的交换空间配置情况,可以使用以下两个常用命令来查看。
free
命令可以快速显示系统内存和交换空间的使用情况,加上 -h
参数可以以人类易读的格式(如 GB、MB)输出。
free -h
输出结果可能如下所示:
total used free shared buff/cache available
Mem: 1.9G 1.2G 115M 8.5M 578M 531M
Swap: 2.0G 0B 2.0G
这里的 Swap
行显示了交换空间的总大小、已使用量和可用量,在这个例子中,系统已经配置了 2GB 的交换空间,但目前未被使用。
swapon
命令提供了更详细的交换空间信息,包括其类型(分区或文件)、大小、优先级等。
swapon --show
如果系统没有配置交换空间,此命令将不会有任何输出,如果已配置,可能会显示:
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
这表明系统使用了一个名为 /swapfile
的文件作为交换空间。
创建并启用交换文件
在现代 CentOS 系统中,使用交换文件是比创建专用交换分区更灵活、更推荐的方法,以下是创建并启用一个 4GB 交换文件的详细步骤。
步骤 1:创建交换文件
我们将使用 fallocate
命令来创建一个指定大小的文件,这个命令非常快速,因为它只是分配空间而不实际写入数据,假设我们要在根目录下创建一个名为 swapfile
的 4GB 文件。
sudo fallocate -l 4G /swapfile
fallocate
命令因文件系统不支持而失败,可以使用更传统但稍慢的 dd
命令作为替代:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
步骤 2:设置正确的文件权限
为了安全起见,交换文件应该只能被 root 用户读写,我们需要将其权限设置为 600
。
sudo chmod 600 /swapfile
步骤 3:将文件格式化为交换空间
使用 mkswap
命令将这个文件设置为 Linux 交换区域。
sudo mkswap /swapfile
执行后,系统会返回类似 Setting up swapspace version 1, size = 4 GiB ...
的信息。
步骤 4:启用交换文件
可以使用 swapon
命令来启用新创建的交换文件。
sudo swapon /swapfile
步骤 5:验证交换空间
再次使用 free -h
或 swapon --show
命令,您应该能看到新的 4GB 交换空间已经成功启用。
free -h
输出示例:
total used free shared buff/cache available
Mem: 1.9G 1.2G 115M 8.5M 578M 531M
Swap: 4.0G 0B 4.0G
使交换文件永久生效
通过上述步骤启用的交换空间在系统重启后会失效,为了使其在每次开机后自动挂载,需要将其信息添加到 /etc/fstab
文件中。
使用文本编辑器(如 vi
或 nano
)打开 /etc/fstab
文件:
sudo vi /etc/fstab
在文件末尾添加以下一行内容:
/swapfile none swap sw 0 0
这行代码告诉系统在启动时将 /swapfile
作为交换空间进行挂载,保存并关闭文件后,交换空间配置就永久生效了。
调整 Swappiness 参数
swappiness
是一个内核参数,用于控制系统使用交换空间的积极程度,它的值范围是 0 到 100。
- 值越低(如 10):内核越倾向于避免使用交换空间,尽可能使用物理内存,这适合大多数服务器场景,因为内存访问速度远快于磁盘。
- 值越高(如 100):内核会积极地使用交换空间,将更多不活跃的内存页移出 RAM。
查看当前 swappiness
值:
cat /proc/sys/vm/swappiness
通常默认值是 30
。
对于服务器,建议将其设置为一个较低的值,10
,以优化性能。
临时修改(重启后失效):
sudo sysctl vm.swappiness=10
永久修改:
编辑 /etc/sysctl.conf
文件:
sudo vi /etc/sysctl.conf
在文件末尾添加:
vm.swappiness=10
保存后,运行 sudo sysctl -p
使更改立即生效,无需重启。
交换空间大小建议
交换空间的大小并非越大越好,应根据系统内存大小和用途来决定,以下是一个通用的建议表:
系统内存 (RAM) | 推荐交换空间大小 | 在启用休眠功能时 |
---|---|---|
≤ 2GB | 至少 2GB | RAM 大小 + 交换空间大小 |
2GB – 8GB | 等于 RAM 大小 | RAM 大小 + 交换空间大小 |
8GB – 64GB | 至少 4GB,不超过 RAM 的一半 | RAM 大小 |
> 64GB | 至少 4GB | 不推荐 |
对于大多数现代服务器,即使拥有大容量内存,配置一个 4GB 到 8GB 的交换空间作为安全缓冲也是一个明智的选择。
相关问答FAQs
问题 1:交换文件和交换分区有什么区别?我应该选择哪一个?
解答: 交换分区是磁盘上一个独立的、专用的分区,而交换文件是文件系统内的一个普通文件,在性能上,传统上认为交换分区略快,因为它避免了文件系统的开销,对于现代 Linux 内核和文件系统(如 ext4、XFS),交换文件的性能已经与交换分区非常接近,几乎可以忽略不计,在灵活性方面,交换文件优势明显:创建、删除和调整大小都非常容易,无需对磁盘进行重新分区,对于绝大多数场景,尤其是云服务器和虚拟机,推荐使用交换文件,因为它更灵活、管理更方便。
问题 2:我的服务器有足够的内存(32GB),还需要设置交换空间吗?
解答: 是的,即使服务器拥有充足的物理内存,也强烈建议配置一定大小的交换空间,原因如下:交换空间可以作为一个“安全网”,应对突发性的内存需求高峰或程序内存泄漏,防止系统因内存耗尽导致关键进程被内核 OOM Killer 杀死而崩溃,Linux 内核会智能地将长时间未访问的匿名内存页(比如某个后台服务的闲置内存)交换到磁盘,从而为需要更多内存的活跃应用(如数据库、缓存)腾出宝贵的物理内存,这有助于提升整体系统性能,一个 4GB 左右的交换空间对于大内存服务器来说,是一种低成本的保险策略。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复