A-A+

如何查看自己新购买的kvm架构VPS内存超售:一般而言就三种方法

2023年06月17日 VPS评价 等您评论

kvm内存超售的方法一般而言就三种。

·

内存交换(Swap)

当系统内存不够用时,宿主机把部分长时间未操作(读写)的内存交换到磁盘上配置的Swap分区,等相关程序需要运行时再恢复到内存中。
·

说白了,就是宿主机的swap当内存用

·

气球驱动(Balloon)

通过virtio_balloon驱动实现动态调整Guest与Host的可用内存空间。Balloon的工作原理是在虚拟机中安装一个kmod,KVM宿主机内存不足,会根据virtio_balloon判断哪些内存页面可以被回收,然后virtio_balloon将这些内存占用,返回给宿主机使用。
·

说白了,就是小鸡的一个间谍virtio_balloon,KVM宿主机内存不足,virtio_balloon kmod会申请占用小鸡空闲的内存。占用的内存就会释放到宿主机。

·

KSM(Kernel Samepage Merging)

KSM是一种内存合并技术,它可以在KVM中实现内存共享,从而节省内存空间。是Linux kernel的一种内存共享机制,在2.6.32版本引入,用于合并具有相同内容的物理主存页面以减少页面冗余。在Kernel中KSM会定期扫描用户注册的内存区域,当有相同的页面就会将其合并,并用一个添加到页表中的新页面来代替原来的页面。当需要修改时,复制新的内存页,再做修改(将其标记为 copy-on-write)
·

说白了,就是相同小鸡的内存页面有重复,KVM宿主机会把这些内存只存为一份。·

简单介绍一下各个方案的问题,和如何发现内存被超售

·

宿主机加swap当内存,

用这个方法是最蠢的,看一下iowait就能发现。客户长期跑基于内存的应用(memcached),还会导致io爆表(传说中的滥用内存)。基本测试一下内存就能发现。内存读取速度低于1G/s(ddr3 ecc都比这个快)

·

小鸡被加了气球驱动(Balloon)

检查lsmod|grep virtio,看看有没有virtio_balloon。如果有,直接rmmod virtio_balloon

这种方法对性能来说没有明显缺点,就是客户的RAM内存会莫名其妙的少一大截。

·

KSM(Kernel Samepage Merging)合并内存页

这种方法,正常来说是没有什么缺点,但是如果kvm宿主机的内存满了,客户机(小鸡)想要修改时,必须复制新的内存页,再做修改(copy-on-write),但是内存不够,那么会引发 OOM Killer 导致进程 crash。

·

如何检查ksm超售

cd /sys/kernel/mm/ksm

里面有几个文件

run 这个是是否打开的标志 为1时打开,0表示停止,2表示正在强行停止KSM并取消合并所有合并页
pages_shared 共享的物理页数
pages_sharing 正在被共享的物理页数

·

检查
`cat /sys/kernel/mm/ksm/run ``
·
我好像有一点洁癖,不允许我的内存被超售,(可能是我写软件本来就特别吃内存【内存滥用】),粗略总结了一下,可能有一些不完美。大家可以指正。


补充,还有一个zram内存的方法。原理就是压缩内存,本质上是用cpu换内存。
zram在小鸡上使用,可以自己超售自己。
在母鸡上使用就可以超售母鸡。

给我留言