系统增加 SWAP 虚拟内存
系统的 RAM 量 | 推荐的交换空间 | 如果允许休眠,推荐的空间 |
---|---|---|
≤ 2 GB | RAM 容量的 2 倍 | RAM 容量的 3 倍 |
> 2 GB – 8 GB | 等于 RAM 的数量 | RAM 容量的 2 倍 |
> 8 GB – 64 GB | 至少 4 GB | RAM 容量的 1.5 倍 |
> 64 GB | 至少 4 GB | 不建议休眠 |
shell
# 看 SWAP 分区大小
free -h
[root@VM-4-8-centos ~]# free -h
total used free shared buff/cache available
Mem: 2.0G 1.4G 74M 676K 511M 421M
Swap: 0B 0B 0B
total:总内存,即系统可用的物理内存总量。
used:已使用内存,指已经被程序或服务占用的内存量。
free:空闲内存,指完全未被使用的内存量。
shared:共享内存,指多个进程间共享的内存部分。
buff/cache:缓冲区/缓存,这部分内存被用来缓存文件数据和作为磁盘操作的缓冲区,当系统需要更多内存时,这部分内存可以被迅速回收。
available:可利用内存,指在不影响系统性能的情况下,应用程序可立即使用的内存量。这个值考虑了缓冲区和缓存的影响,因此比
free
列显示的空闲内存量要多。
方式一:添加 swap 文件
添加一个 swap 文件作为 swap
shell
# 使用 dd 命令创建名为 swapfile 的 swap 交换文件(文件名和目录任意)
[root@VM-4-8-centos ~]# dd if =/dev/zero of =/var/swapfile bs = 4K count = 1024000
1024000+0 records in
1024000+0 records out
4194304000 bytes (4.2 GB) copied, 14.4986 s, 289 MB/s
# 对交换文件格式化并转换为 swap 分区
[root@VM-4-8-centos ~]# mkswap /var/swapfile
Setting up swapspace version 1, size = 4095996 KiB
no label, UUID=42400245-48e5-434f-abc6-670605ef4539
# 挂载并激活分区
[root@VM-4-8-centos ~]# swapon /var/swapfile
swapon: /var/swapfile: insecure permissions 0644, 0600 suggested.
# 执行以上命令可能会出现:“不安全的权限 0644,建议使用 0600”类似提示,
# 不要紧张,实际上已经激活了,可以忽略提示,也可以听从系统的建议修改下权限:
[root@VM-4-8-centos ~]# chmod -R 0600 /var/swapfile
# 查看新 swap 分区是否正常添加并激活使用
[root@VM-4-8-centos ~]# free -h
total used free shared buff/cache available
Mem: 2.0G 1.4G 69M 700K 512M 422M
Swap: 3.9G 0B 3.9G
# 修改 fstab 配置,设置开机自动挂载该分区
[root@VM-4-8-centos ~]# echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
# 查看是否已经使用了交换内存
[root@VM-4-8-centos ~]# top
top - 17:09:50 up 27 days, 1:46, 1 user, load average: 0.00, 0.04, 0.08
Tasks: 103 total, 1 running, 102 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.0 us, 3.0 sy, 0.0 ni, 93.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2046504 total, 71732 free, 1457020 used, 517752 buff/cache
KiB Swap: 4095996 total, 4095996 free, 0 used. 426936 avail Mem
方式二:新建 swap 分区
新建分区作为 swap 分区
shell
# 查看当前的分区情况
[root@VM-4-8-centos ~]# lsblk
NAME MAJ: MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 223.6M 0 rom
vda 253:0 0 50G 0 disk
└─vda1 253:1 0 50G 0 part /
# 假设新建了一个分区 /dev/sdb1,使用 fdisk 或 parted 创建。
# 格式化新的 swap 分区
sudo mkswap /dev/sdb1
# 启用新的 swap 分区
sudo swapon /dev/sdb1
# 为了让 swap 设置在系统重启之后依然有效,需要将它添加到 /etc/fstab 文件中
echo '/dev/sdb1 none swap sw 0 0' | sudo tee -a /etc/fstab
更改 swap 权重配置
一般默认的情况,当我们开启交换虚拟内存空间后,默认好像是当内存使用百分 50 的时候,就会开始使用交换空间,这样就会造成一个情况,就是本身物理内存还没有使用完成, 就去使用虚拟内存,这样肯定会影响我们的使用效率,那么我们怎么避免这个情况的发生呢?
答案就是:可以通过 swappiness 值进行管理,swappiness 表示系统对 Swap 分区的依赖程度,范围是 0~100,数值越大,依赖程度越高,也就是越高越会使用 Swap 分区。
所以,我们现在并不希望我们的机器过度依赖 Swap 分区,只有当我们 负载超过某个百分比的时候,才使用交换空间,所以这也决定了,我们这个值并不是非常大,一般设置 10 ~50 左右。
当然如果小伙伴的是 SSD 的话,那么这个值可以稍微大一些。
shell
# 下面我们查看当前的 swappiness 数值
[root@VM-4-8-centos ~]# cat /proc/sys/vm/swappiness
30
# 修改 swappiness 值,这里以 10 为例
[root@VM-4-8-centos ~]# sysctl vm.swappiness = 10
vm.swappiness = 10
# 设置永久有效,重启系统后生效
[root@VM-4-8-centos ~]# echo "vm.swappiness = 10" >> /etc/sysctl.conf
删除 swap
shell
# 查看目录
[root@VM-4-8-centos ~]# swapon -s
Filename Type Size Used Priority
/var/swapfile file 4095996 0 -2
# 停止正在使用 swap 分区
[root@VM-4-8-centos ~]# swapoff /var/swapfile
# 删除 swap 分区文件
[root@VM-4-8-centos ~]# rm -rf /var/swapfile
# 删除或注释掉我们之前在 fstab 文件里追加的开机自动挂载配置内容
[root@VM-4-8-centos ~]# vim /etc/fstab
# 删除以下内容(整行删除)
/var/swapfile swap swap defaults 0 0