前言

在之前的文章中提到过,我们可以通过释放缓存的方式来腾出内存。但是当你的程序占用内存就是过高时,还是会出现内存不足,这时就需要通过其它途径来扩展内存了,将磁盘转为临时内存就是其中一种方式。

需要注意的是,Linux使用磁盘做内存并不是直接把磁盘改成内存,而是使用磁盘开辟出一个交换区( Swap)作为虚拟内存使用。

由于Swap是读写磁盘。而众所周知,磁盘的读写速度是远不及直接读取内存来的快的,所以这便是使用Swap的缺陷。

创建交换空间(Swap)

使用下面命令创建交换空间(Swap):

1
# dd if=/dev/zero of=[path] bs=[bytes] count=[blocks]

if=/dev/zero:输入文件,/dev/zero表示空文件,即以null字符写入文件中路径。

of=path:输出文件,即指定(需要设为交换空间的)路径。

bs=bytes:同时设置读入/输出的块大小为bytes个字节(可以理解为读写速度)。

count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。

示例:创建一个4G的Swap

1
# dd if=/dev/zero of=/swapfile bs=4M count=1K

4M*1K=4G,这里可以理解为用4M大小的块拷贝文件,最大拷贝1024次,在拷贝的同时完成转换。

设置路径权限:

1
# chmod 600 /swapfile

将路径设置为Swap:

1
# mkswap /swapfile

启用Swap:

1
# swapon /swapfile

设置为永久Swap:

如果不执行此步骤,则每次重启时Swap都将失效

1
# vim /etc/fstab

在文件的最后添加Swap信息

1
2
3
# /分区文件路径 swap swap defaults 0 0
# 注意与前文格式对齐
/swapfile swap swap defaults 0 0

示例:开启5G的Swap:

图片

删除交换空间(Swap)

如果不想要这些交换空间如何删除呢?

禁用Swap:

1
# swapoff /swapfile

删除Swap:

1
# rm /path/to/swapfile

如果之前有在 /etc/fstab 文件中添加Swap信息的,记得删除掉

后记

当系统的物理内存不足以满足当前运行的任务时,Linux内核会将部分不常用的数据移动到交换空间中,以释放物理内存供更紧急的用途。这个过程被称为页面交换(paging)。

在Linux系统中,内核会根据系统的内存管理策略来决定何时使用交换空间和何时使用物理内存。通常情况下,物理内存(RAM)是首选,而交换空间则被用作备用。因为物理内存的访问速度远远快于交换空间(硬盘或 SSD),正因如此,使用交换空间进行交换操作可能导致性能下降。