Linux 下配置虚拟内存

虚拟内存是操作系统物理内存不足时对系统内存的一个补充。

操作系统在内存不足时,会将物理内存中不常用的内存页 (一段内存区块) 保存到磁盘上,这个过程被称为「换页」。

虚拟内存是物理内存的延伸,它能让系统跨越物理配置的限制,对内存容量进行「升级」,用磁盘替代物理内存,让机器看起来像是有了更多内存。但要注意的是,如果大量使用虚拟内存,系统产生过多换页行为,将会导致系统变得非常缓慢。毕竟磁盘的 IO 性能比起真实的物理内存的 IO 性能要慢好几个数量级。

所以虚拟内存通常只是用于缓解机器的内存压力,要彻底解决内存问题,仍然需要升级机器的配置。因此虚拟内存的容量通常不宜设得过大,因为过大也没有用。而通常的,虚拟内存应当设置为物理内存大小的 1~2 倍。

虚拟内存在 Linux 下所被存储的磁盘空间又被称之为「交换空间」 (swap)。

如果是手动安装的 Linux 发行版,那么在系统安装的时候就会提示你是否设置交换空间,或默认就为你设置了交换空间。而这时所设置的交换空间通常在磁盘中单独占一个分区。

而如果是云服务器所提供的操作系统,出于性能考虑,所以默认没有设置交换空间,这一点可以通过 free 命令查看:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           592M        223M         88M         16M        280M        259M
Swap:            0B          0B          0B

其中 Swap 显示为 0B, 0B, 0B 表示系统中没有配置交换空间。

而我这里简单介绍一下如何在云服务器上配置交换空间。

由于在云服务器上,磁盘已经进行分区,想要在不影响现有系统的情况下重新对磁盘分区来设置交换分区困难略大,所以这里介绍一下如何通过交换文件的方式实现虚拟内存。

首先通过 dd 命令创建一个所需大小的空文件用来作为交换文件,这里以 1024 M 的交换文件为例:

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

这里 dd 命令将文件写入到 /swapfile 的位置,每个块为 1M 大小,写入 1024 个块,一共是 1024M。

然后由于内存中的数据应当是需要保密的,不能让其他进程读取交换空间的内容,需要对 /swapfile 的读写权限加以限制:

sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

然后格式化交换文件:

sudo mkswap /swapfile

挂载交换空间:

sudo swapon /swapfile

再次使用 free 命令查看挂载是否成功:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           592M        219M         48M         16M        324M        266M
Swap:          1.0G          0B        1.0G

Swap 为 1.0G, 0B, 1.0G 表示挂载成功了。

如果需要卸载交换空间,则需要使用命令 swapoff:

sudo swapoff /swapfile
发表新评论