前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[linux][kvm]模拟大量虚拟机遇到的问题

[linux][kvm]模拟大量虚拟机遇到的问题

作者头像
皮振伟
发布2019-05-06 14:33:45
1.4K0
发布2019-05-06 14:33:45
举报
文章被收录于专栏:皮振伟的专栏

前言: 网络的同事希望模拟大量的虚拟机(万台数量级),又受到物理资源的限制,只能使用几台物理机。 遇到了各种奇奇怪怪的问题。 分析:

1,aio数量爆了 单机上创建的虚拟机到达512的时候,在模拟大规模的场景下,发现创建虚拟机失败。Host上dmesg的内容是segment fault。 原因是达到了Linux的最大的aio数量,QEMU在初始化aio context的时候,对这个错误处理逻辑不严谨。导致了空指针。 #cat /proc/sys/fs/aio-max-nr #cat /proc/sys/fs/aio-nr 需要确认这两个参数。aio-nr如果等于aio-max-nr,就是aio-nr爆了导致的。因为QEMU对每个native方式访问的disk使用128个AIO events。默认aio-max-nr参数65536,那么65536 / 128 = 512。 所以目前的话,单机上最大支持512个本地盘(因为每个虚拟机一个,所以就是512个虚拟机),这个在实际应用的场景下不会发生。所以这个不作为通用的解决方案。 临时解决方案:#echo 524288 > /proc/sys/fs/aio-max-nr 2,virtlogd的文件描述符爆了 /lib/systemd/system/virtlogd.service中,需要确认文件描述符的数量。默认是1024,所以创建到不到300虚拟机的时候就会出现创建虚拟机失败。因为virtlogd和每个QEMU之间使用3个UNIX socket做连接,消耗3个fd。

配置如下: [Service] LimitNOFILE=16384 重启virtlogd服务: #service virtlogd restart 3,内存被cache使用过多 如果看到很多的page cache, 执行#echo 3 > /proc/sys/vm/drop_caches清空page cache。 4,内存不足 启动的虚拟机使用cirros,每台使用128M内存。192G的物理即,启动之后只有187G。cirros因为是克隆的,并不是同一个文件,所以需要稍多的page cache,大约10G。再减掉watermark的阈值等等,真正的可用内存大约175G左右。 175G / 128M = 1400。 使用KSM做内存合并,针对这种场景有大量的合并空间: 启动KSM #echo 1 > /sys/kernel/mm/ksm/run 加速合并效率,牺牲最多一个CPU(最多一个内核线程执行,执行中间也有sleep) #echo 10240 > /sys/kernel/mm/ksm/pages_to_scan 实际效果: #cat /sys/kernel/mm/ksm/pages_sharing 24643919 #cat /sys/kernel/mm/ksm/pages_shared 795802 实际合并内存(24643919 - 795802) × 4K = 91G 合并的内存可以启动的虚拟机个数:91G / 128M = 728 理论上预计总共可以创建: 1400 + 728 = 2128 实际上总共创建: # virsh list | grep instance | wc -l 2279

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档