Swap内存

简介

Swap内存,即交换区内存,也叫虚拟内存。它的本质是物理磁盘拿出来一部分伪装成内存的区域。

为什么要有Swap内存

我们知道程序是运行在内存中的,程序从内存中读写数据的速度仅低于cpu,但比磁盘高不止一个数量级。一台机器的内存是有限的,当机器的cpu不够用时,就必须把内存中不经常运行的程序给踢出去,踢到哪里呢,这个时候swap交换区就出现了。当内存不够的时候,被踢出去的程序就暂存在swap交换区中,当需要这个被踢出去的进程的时候,就从交换区重新加载到内存,否则它不会主动交换到内存中,这种换入换出的操作实现了内存的循环利用,让用户感觉不到内存的限制。

内存和swap之间是按照内存页为单位进行数据交换的,一般Linux中内存页的大小设置为4kb。而内存和磁盘是按照内存块来交换数据的。

Swap内存的设置

当物理内存使用完或者达到一定比例之后,我们可以使用swap做临时的内存使用。当物理内存和swap都被使用完那么就会出错,out of memory。对于使用多大比例内存之后开始使用swap,在系统的配置文件中可以通过调整参数进行修改。

cat  /proc/sys/vm/swappiness
60

该参数可以从0-100进行设置。0就是最大限度使用内存,尽量不使用swap;100就是积极使用swap。这个具体的通过系统的算法进行确定。

物理内存我们是无法更改的,所以swap的大小设置将会影响应用能否正常运行。那么swap大小如何确定。根据centos官网介绍可以得出如下公式:M = Amount of RAM in GB, and S = Amount of swap in GB, then If M < 2, S = M *2 Else S = M + 2。而且其最小不应该小于32M(never less than 32 MB)。

swap分区的数量对性能也有很大的影响。因为swap毕竟还是以磁盘来伪装成内存,交换的操作是磁盘IO的操作而不是内存的load与store操作。如果有多个swap交换区,每个swap会有一定的优先级,该优先级也可以调整。swap空间的分配会以轮流的方式操作于所有的swap,这样会大大均衡IO的负载,加快swap交换的速度。

swap相关命令

swapon/swapoff swap-disk_name:启动和关闭相应的swap_disk_name
swapon -s :可以查看当期swap的使用情况,也可以通过 cat /proc/swaps命令查看

Last updated