Skip to content

虚拟内存(SWAP)

为了避免内存溢出通常需要设置下虚拟内存,也就是在磁盘中分配一个区域来作为内存使用。尽管在当前内存不值钱的情况下越来越不关键了,但他依然是一个很重要的知识点。

有两种方式来创建虚拟内存:

  1. 直接在磁盘中创建一个特定分区来做为虚拟内存
  2. 使用一个文件作为虚拟内存

使用磁盘特殊分区来创建虚拟内存

在对磁盘进行分区时,可以创建一个区域并标记为 Linux swap 就创建了一个用于虚拟内存的分区:

Bash
[root@study ~]# gdisk /dev/vda
Command (? for help): n
Partition number (6-128, default 6):
First sector (34-83886046, default = 69220352) or {+-}size{KMGTP}:
Last sector (69220352-83886046, default = 83886046) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name
   6        69220352        70268927   512.0 MiB   8200  Linux swap

之后同样需要执行格式化,这通过特殊的 mkswap 命令来完成:

Bash
[root@study ~]# mkswap /dev/vda6
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=6b17e4ab-9bf9-43d6-88a0-73ab47855f9d
[root@study ~]# blkid /dev/vda6
/dev/vda6: UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" TYPE="swap"

之后还需要 swapon 来启用虚拟内存,同样 swapoff 来关闭虚拟内存:

Bash
[root@study ~]# swapon /dev/vda6
[root@study ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1275140      227940      329256        7804      717944      874752
Swap:       1572856      101260     1471596   <==有看到增加了沒?

Tips

可以使用多个虚拟内存,这可以通过 swapon -s 来查看目前使用了那些 swap。

如果想要开机启动同样可以将 swap 添加到 /etc/fstab 文件中,他的挂载点比较特殊就是 swap:

Bash
UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d"  swap  swap  defaults  0  0

使用文件作为 swap

通过 dd 来创建一个特定大小的文件来作为 swap:

Bash
[root@study ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s

[root@study ~]# ll -h /tmp/swap
-rw-r--r--. 1 root root 128M Jun 26 17:47 /tmp/swap

之后同样需要经过格式化和挂载:

Bash
[root@study ~]# mkswap /tmp/swap
Setting up swapspace version 1, size = 131068 KiB
no label, UUID=4746c8ce-3f73-4f83-b883-33b12fa7337c
[root@study ~]# swapon /tmp/swap
[root@study ~]# swapon -s
Filename            Type            Size    Used    Priority
/dev/dm-1           partition       1048572 100380  -1
/dev/vda6           partition       524284  0       -2
/tmp/swap           file            131068  0       -3