> 虚拟化 Virtualization > Proxmox >

Proxmox VE swap虚拟内存讲解。让内存超起来。

Linux要超内存,自然需要依靠swap。

Swap虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

什么时候可以启用swap?
如果物理内存不足,或者防止突然的内存溢出,导致进程被杀死。可以用swap。

如何启用swap?
可以将一个分区,或者一个文件作为swap,使用swapon启用。

以文件形式
#创建一个16G的swap,bs * count =16G
dd if=/dev/zero of=/swapfile bs=1G count=16
#配置安全的权限
chmod 0600 /swapfile
#格式化成swap
mkswap /swapfile
#挂载swap
swapon /swapfile
#验证
free -h
以分区形式
创建一个新的分区,如/dev/sdb4

#格式化成swap
mkswap /dev/sdb4
#挂载swap
swapon /dev/sdb4
#验证
free -h
Swap策略?
Linux有个内核参数vm.swappiness。值为0-100,0代表不怎么想用swap,100代表非常想用swap。

举个例子,电脑有 16 GB 的内存和 8 GB 的swap。如果我在内核参数中使用 60 swappiness,那么在使用大约 6 GB (16G*40% == 6.4G)的内存后,机器开始使用swap。

查看当前的swap策略
要检查系统上的当前 swappiness 值,请使用以下 cat 命令:

cat /proc/sys/vm/swappiness

# 大多数 Linux 发行版上的默认 swappiness 值为 60
您可以用来确定 swappiness 值的另一个命令是 sysctl :

sysctl vm.swappiness
vm.swappiness = 60临时调整的方法如下,我们调成10:
临时调成swap策略
# 方法1:
[root@timeserver ~]# sysctl vm.swappiness=10
vm.swappiness = 10

# 方法2:
[root@timeserver ~]# echo 10 > /proc/sys/vm/swappiness
新值会立即使用,无需重新启动。 这只是临时调整的方法,重启后会回到默认设置的

永久更改Swappiness 值
要想永久调整的话,需要在/etc/sysctl.conf修改,加上:

[root@timeserver ~]# cat /etc/sysctl.conf
vm.swappiness=10
激活设置

[root@timeserver ~]# sysctl -p
启用Swap有什么优劣?
优:缓解物理内存压力

劣1:Swap没有物理内存的速度,过多使用Swap会降低运行性能。且如果Swap所在的硬盘性能不足,还会导致严重的io延迟。总体性能下降明显。Windows虚拟机会明显卡顿。

劣2:如果大量使用swap,可能造成内存错误!

如何减小Swap的不良影响
使用一块或者多块高性能的NVME硬盘做swap。
增加物理内存。 (责任编辑:IT)