Linux 创建 Swap 虚拟内存分区

· Maintenance

简介

Swap分区,即交换区,系统在物理内存(这里应该是运行内存)不够时,与Swap进行交换。 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。 经常看到有些Linux(国内汉化版)安装手册上有这样的说明:Swap空间不能超过128M。为什么会有这种说法? 在说明“128M”这个数字的来历之前,先给问题一个回答:根本不存在128M的限制!限制是2G! Swap空间是分页的,每一页的大小和内存页的大小一样,方便Swap空间和内存之间的数据交换。 旧版本的Linux实现Swap空间时,用Swap空间的第一页作为所有Swap空间页的一个“位映射”(Bit map)。 这就是说第一页的每一位,都对应着一页Swap空间。如果这一位是1,表示此页Swap可用;如果是0,表示此页是坏块,不能使用。 这么说来,第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个映射位也被占用,用来表示Swap的版本(原来的版本是Swap_space,最新的版本是swapspace2)。 那么,如果说一页的大小为s,这种Swap的实现方法共能管理8×(s10)18 \times ( s - 10 ) - 1个Swap页。对于i386系统来说s=4096s=4096,则空间大小共为133890048,如果认为1MB=220Byte1 MB=2^{20} Byte的话,大小正好为128M。之所以这样来实现Swap空间的管理,是要防止Swap空间中有坏块。如果系统检查到Swap中有坏块,则在相应的位映射上标记上0,表示此页不可用。这样在使用Swap时,不至于用到坏块,而使系统产生错误。

swap无法替代物理内存,性能上也会差很多,在SSD硬盘上使用对读写性能会有所加成。另外本文是通过创建一个swap文件来充当交换空间的作用,与Partition方法不同。

查看内存的情况

此时swap行应为0

Image

初始时 Swap 相关数据都是0。

创建 swap 文件并使之生效

创建用于交换分区的文件

dd if=/dev/zero of=/swapfile bs=1M count=2048

注:block_size、number_of_block 大小可以自定义,比如 bs=1M count=1024 代表设置 1G 大小 SWAP 分区。

设置交换分区文件

mkswap /swapfile
Image

立即启用交换分区文件

swapon /swapfile

warning 提示
**这个命令可能会提示“swapon: /swapfile: insecure permissions 0644, 0600 suggested.”,意思是建议把swap设置成644或600权限。 **

检测

这时运行free -m会发现swap一列已经有数字了,就是上面第一次执行free -m 后的结果

如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a

永久生效

/etc/fstab 中添加如下一行,使之永久生效

sudo vi /etc/fstab

/swapfile swap swap defaults 0 0

修改 swpapiness 参数

在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则

swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区

swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。
查看修改前为 0,需要在物理内存使用完毕后才会使用 SWAP 分区

可以使用下述方法临时修改此参数,假设我们配置为空闲内存少于 10% 时才使用 SWAP 分区

echo 10 >/proc/sys/vm/swappiness

若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:vm.swappiness=10

Comments

Send Comments

Markdown supported. Please keep comments clean.