检查自己的kvm架构VPS内存有没有超售的技术教程
阿里云服务器 | 腾讯云服务器 | VPS2EZ:老牌低调VPS | ZJI:香港日本美国独服 |
LOCVPS服务周到 | HostKvm低调KVM VPS | 傲游主机:优质VPS | 80VPS:老牌VPS主机 |
搬瓦工:CN2 GIA线路 | CloudCone:性价比高 | JustMySocks科学上网 | RackNerd:超级便宜 |
JustMySocks科学上网 | 好用的宝塔面板 | 购买搬瓦工VPS | 恒创:香港CN2服务器 |
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在小鸡上使用,可以自己超售自己。
在母鸡上使用就可以超售母鸡。
评论专区