php kvm,qemu-kvm 问题

guest内部显示内存充裕:

ce14f9f309692d44bab34a64dd2b87ed.png

宿主机内存也充裕:

541071c044815dda4b69842a72483f2a.png

guest 对应的qemu-kvm进程在不停地将内存中的数据交换到swap中:

381a397f6374ddeedab107dee2d905a2.png

aaef7484d11e12b4436eff672e58d67a.png

还有相同问题的另一个实例:

4859ca702680fd913a3a3a178aa6bf4b.png

宿主机有足够的内存,qemu-kvm占用5.3G的swap,只使用566MB的内存,为什么?

guest内部的内存使用情况如下:

a4a59dbb524afb4dbd1f5822f1cbdd08.png

分析:

我们可能看见guest中看到的已用内存小于kvm进程的rss, 因为kvm进程的内存不仅包含提供给guest使用的内存,也包含自身其他需要的内存。

我们也可能看见guest中看到的已用内存大于kvm进程的rss,因为guest看到的内存未必是真正的内存,很可能早已被宿主机给交换到swap中去了,这就是我们上面看到的情况;guest刚刚起来的时候,并没有直接分配自己可以使用的最大内存,但是,可能某一个时刻一下子占用了90%的内存,当内存下降到10%的时候,80%的内存并没有还给宿主机,而是闲着,但是,宿主机永远不知道这80%的内存是在闲着的,唯一知道的就是好长时间没有访问了,于是,宿主机可能就会将这部分(不活跃的)内存交换到swap中去;等到guest想用内存的时候,其实访问的并不是内存,而是宿主机上的swap; 疑问: 随着guest中这80%的内存的频繁使用,会使得guest的真实内存变多而swap变少吗?应该会的

场景1: 大内存的kvm(16GB),里面只有一个使用很少内存(200MB)的小程序,不断地从外部下载文件,写入到磁盘中,结果就是: 下载过的文件都会被尽量缓存到内存中,16GB的内存大部分用于cache了,而且下载过的文件基本不会再被使用,于是,这部分内存就是in-active的了,于是,表现在宿主机上,这部分内存就会被尽力swap到磁盘上,当宿主机的swap被用尽时,其他进程想swap却很为难:

guest:

f580371aad2a79d91693d704503a0187.png

宿主机上:

b5296b601fc629dae58dd8964459123d.png

9514b03e552403b1350a2fa9cf1a4f29.png

宿主机上的kvm进程的RES远大于guest中内存的used,因为宿主机上的swap已用尽,如果添加更多的swap的话,会继续有更多的RES迁移到swap中去。

解决办法:

guest本没必要使用16GB内存,给2GB就可以了; (尽管如此,也会有不必要的cache存在)

guest中可以定期地drop cache,避免cache占用太大; 理论上来讲,一旦guest有大量的cache占用了内存,即使drop cache了,宿主机上也不会释放这部分内存(或swap),因为宿主机根本不知道这部分内存是不再使用了的;(当然,可以通过别的方式真正意义上回收这部分内存),如下:

84d451f7b7df997893deb677b0fb386a.png

guest中drop cache后,buff/cache使用1.2G,宿主机上的RES、swap依然保持不变; 其实,不仅drop cache不能影响宿主机分配给guest的内存大小,reboot guest都不会影响宿主机分配给guest的内存大小的,因为reboot guest是热引导,kvm进程还是原来的进程,宿主机也不知道里面发生了重启的动作,所以,分配给kvm进程的资源也不会有变化

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值