现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存,那么会将一些不频繁的数据放到虚拟内存以释放硬件内存的空间达到节省空间的目的,下面一起来设置下 CentOS 的虚拟内存设置。

什么是虚拟内存?

虚拟内存 是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上物理内存通常被分隔成多个内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术使得大型程序的编写变得更容易,对真正的物理内存(例如 RAM 的使用也更有效率。此外,虚拟内存技术可以使多个进程共享同一个运行库,并通过分割不同进程的内存空间来提高系统的安全性。

设置 swap 虚拟内存

CentOS 设置 swap 虚拟内存

设置空间大小

分区大小具体看业务使用,如不清除业务可参考一下规则: 4G 以内的物理内存,SWAP 设置为内存的 2 倍。 4-8G 的物理内存,SWAP 等于内存大小。 8-64G 的物理内存,SWAP 设置为 8G。 64-256G 物理内存,SWAP 设置为 16G。

新增分区文件

#if=文件名:表示指定源文件
#of=文件名:表示指定目的文件,可以自己去设定目标文件路径。
#bs=xx:同时设置读入/写出的“块”大小,单位字节
#count=xx:表示拷贝多少个“块”,一般只改这个
#bs * count 为拷贝的文件大小,即swap分区大小
dd if=/dev/zero of=/swapfile bs=1024 count=4096000

image-20221201111932058

分区文件格式化并转换为 swap 分区

mkswap /swapfile

挂载并激活分区

swapon /swapfile

#查看是否激活
free -h

image-20221201111954279

设置分区权限

chmod 600 /swapfile

开机自动挂载

echo  "/swapfile   swap  swap  defaults  0  0" >>  /etc/fstab

如需卸载分区: swapoff /swapfile 删除分区文件: rm -rf /swapfile

更改 Swap 配置(设置优先级)

swappiness 值(0-100),系统对 swap 分区的依赖程度,越高则越倾向于使用 swap 分区。 当然,高度依赖 swap 会造成物理内存远未使用完,就使用 swap 分区,我们知道 swap 分区性能远不如物理内存,这反而降低了系统性能,违背了我们创建 swap 分区的初衷。 我们希望在物理内存即将满荷时再使用 swap,这就决定了 swappiness 值一般为 10-60 为宜,当然固态硬盘可以偏高些。

查看当前的 swappiness 数值:

cat   /proc/sys/vm/swappiness

修改 swappiness 值,这里以 60 为例。

sysctl vm.swappiness=60

若希望 vm.swappiness=60 永久生效,则需要修改 sysctl 配置文件,直接 echo 追加配置内容,重启系统后即可生效:

echo "vm.swappiness = 60"  >>  /etc/sysctl.conf